Android中ViewPager1和ViewPager2的使用教程
Android X的东西都已经使用很久了,都没好好记录一下,
现在记录一下Android X 下 ViewPager1和ViewPager2的使用,几乎是每个项目中都会使用的控件,他们之间还是有点区别的,
案例效果图,ViewPager和ViewPager2
文章图片
首先ViewPager1和ViewPager2 是在Android X 的appcompat 库中,创建项目就有的
xml
首页来看看ViewPager1的Adapter
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {private ListfragmentList; public MyFragmentPagerAdapter(FragmentManager fm,List fragmentList) {super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); this.fragmentList = fragmentList; } @NonNull@Overridepublic Fragment getItem(int position) {return fragmentList.get(position); } @Overridepublic int getCount() {return fragmentList.size(); }}
ViewPager2的Adapter
public class MyFragmentPagerAdapter extends FragmentStateAdapter { private ListfragmentList; public MyFragmentPagerAdapter(@NonNull @NotNull FragmentActivity fragmentActivity,List fragmentList) {super(fragmentActivity); this.fragmentList = fragmentList; }@NonNull@NotNull@Overridepublic Fragment createFragment(int i) {return fragmentList.get(i); } @Overridepublic 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() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Overridepublic void onPageSelected(int position) {//滑动到第几个navigation.getMenu().getItem(position).setChecked(true); } @Overridepublic void onPageScrollStateChanged(int state) {}});
ViewPager2加载Fragment
MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(this,fragmentList); viewpager2.setAdapter(pagerAdapter); viewpager2.setOffscreenPageLimit(fragmentList.size()); viewpager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {super.onPageScrolled(position, positionOffset, positionOffsetPixels); } @Overridepublic void onPageSelected(int position) {//滑动到第几个super.onPageSelected(position); navigation.getMenu().getItem(position).setChecked(true); } @Overridepublic void onPageScrollStateChanged(int state) {super.onPageScrollStateChanged(state); }});
效果图是结合BottomNavigationView+ViewPager一起使用的
上一篇博客讲到了BottomNavigationView,可以去看看他的介绍
BottomNavigationView+ViewPager/ViewPager2的绑定都是一样的
navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {@Overridepublic 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; });
这个下标如何来的呢?
【Android中ViewPager1和ViewPager2的使用教程】那当然是BottomNavigationView 绑定的按钮中设置的了
属性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第三方框架(五)ButterKnife
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募