这篇文章主要介绍了Android中ViewPager1和ViewPager2的使用,效果图是结合BottomNavigationView+ViewPager一起使用的,具体实例代码跟随小编一起看看吧
Android X的东西都已经使用很久了,都没好好记录一下,
现在记录一下Android X 下 ViewPager1和ViewPager2的使用,几乎是每个项目中都会使用的控件,他们之间还是有点区别的,
案例效果图,ViewPager和ViewPager2
首先ViewPager1和ViewPager2 是在Android X 的appcompat 库中,创建项目就有的
xml
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
首页来看看ViewPager1的Adapter
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragmentList) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
this.fragmentList = fragmentList;
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
ViewPager2的Adapter
public class MyFragmentPagerAdapter extends FragmentStateAdapter {
private List<Fragment> fragmentList;
public MyFragmentPagerAdapter(@NonNull @NotNull FragmentActivity fragmentActivity,List<Fragment> fragmentList) {
super(fragmentActivity);
this.fragmentList = fragmentList;
}
@NonNull
@NotNull
@Override
public Fragment createFragment(int i) {
return fragmentList.get(i);
}
@Override
public int getItemCount() {
return fragmentList.size();
}
}
ViewPager加载Fragment
MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),fragmentList);
viewpager.setAdapter(pagerAdapter);
viewpager.setOffscreenPageLimit(fragmentList.size());
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {//滑动到第几个
navigation.getMenu().getItem(position).setChecked(true);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
ViewPager2加载Fragment
MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(this,fragmentList);
viewpager2.setAdapter(pagerAdapter);
viewpager2.setOffscreenPageLimit(fragmentList.size());
viewpager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {//滑动到第几个
super.onPageSelected(position);
navigation.getMenu().getItem(position).setChecked(true);
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
}
});
效果图是结合BottomNavigationView+ViewPager一起使用的
上一篇博客讲到了BottomNavigationView,可以去看看他的介绍
BottomNavigationView+ViewPager/ViewPager2的绑定都是一样的
navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem menuItem) {
if (menuItem.getItemId() == R.id.menu_mail){
viewpager.setCurrentItem(0);
}else if (menuItem.getItemId() == R.id.menu_bookshelf){
viewpager.setCurrentItem(1);
}else if (menuItem.getItemId() == R.id.menu_my_config){
viewpager.setCurrentItem(2);
}
return false;
}
});
还有一种方式:
navigation.setOnNavigationItemSelectedListener(item -> {
Toast.makeText(ApiDemo1Activity2.this,
"下标"+item.getOrder(),Toast.LENGTH_LONG).show();
viewpager.setCurrentItem(item.getOrder());
return true;
});
这个下标如何来的呢?
那当然是BottomNavigationView 绑定的按钮中设置的了
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="bottom_navigation_view">
<item
android:id="@+id/menu_mail"
android:icon="@drawable/ic_bottom_mail"
android:title="QHN0cmluZy9ib29rX21haWw="
android:orderInCategory="0"
/>
<item
android:id="@+id/menu_bookshelf"
android:icon="@drawable/ic_bottom_books"
android:orderInCategory="1"
android:title="QHN0cmluZy9ib29rX3NoZWxm" />
<item
android:id="@+id/menu_my_config"
android:icon="@drawable/ic_bottom_person"
android:orderInCategory="2"
android:title="QHN0cmluZy9teQ==" />
</menu>
属性 android:orderInCategory="0" 来设置下标,这样就更方便绑定ViewPager了
总结ViewPager和ViewPager2的区别
- ViewPager2API最大的变化是它现在使用RecyclerView。
- 使用ViewPager2需要迁移到 AndroidX ,因为android.support库中不支持ViewPager2
- FragmentStateAdapter 替换 FragmentStatePagerAdapter
- RecyclerView.Adapter 替代 PagerAdapter
- registerOnPageChangeCallback替换 addPageChangeListener
官方文档介绍:
ViewPager2 | Android 开发者 | Android Developers
到此这篇关于Android中ViewPager1和ViewPager2的使用的文章就介绍到这了,更多相关Android ViewPager1和ViewPager2使用内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Android中ViewPager1和ViewPager2的使用教程
- iOS 对当前webView进行截屏的方法 2023-03-01
- Android实现轮询的三种方式 2023-02-17
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- 详解flutter engine 那些没被释放的东西 2022-12-04
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- Android studio实现动态背景页面 2023-05-23
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- Android实现监听音量的变化 2023-03-30
- Flutter实现底部和顶部导航栏 2022-08-31
