欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中ViewPager1和ViewPager2的使用教程

 更新時間:2021年10月20日 10:02:13   作者:切切歆語  
這篇文章主要介紹了Android中ViewPager1和ViewPager2的使用,效果圖是結合BottomNavigationView+ViewPager一起使用的,具體實例代碼跟隨小編一起看看吧

Android X的東西都已經使用很久了,都沒好好記錄一下,

現在記錄一下Android X 下 ViewPager1和ViewPager2的使用,幾乎是每個項目中都會使用的控件,他們之間還是有點區(qū)別的,

案例效果圖,ViewPager和ViewPager2

首先ViewPager1和ViewPager2 是在Android X 的appcompat 庫中,創(chuàng)建項目就有的

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="@string/book_mail"
        android:orderInCategory="0"
        />
 
    <item
        android:id="@+id/menu_bookshelf"
        android:icon="@drawable/ic_bottom_books"
        android:orderInCategory="1"
        android:title="@string/book_shelf" />
 
    <item
        android:id="@+id/menu_my_config"
        android:icon="@drawable/ic_bottom_person"
        android:orderInCategory="2"
        android:title="@string/my" />
 
</menu>

屬性  android:orderInCategory="0"  來設置下標,這樣就更方便綁定ViewPager了

總結ViewPager和ViewPager2的區(qū)別

  1. ViewPager2API最大的變化是它現在使用RecyclerView。
  2. 使用ViewPager2需要遷移到 AndroidX ,因為android.support庫中不支持ViewPager2
  3. FragmentStateAdapter 替換 FragmentStatePagerAdapter
  4. RecyclerView.Adapter 替代 PagerAdapter
  5. registerOnPageChangeCallback替換 addPageChangeListener

官方文檔介紹:

ViewPager2  Android 開發(fā)者  |  Android Developers

到此這篇關于Android中ViewPager1和ViewPager2的使用的文章就介紹到這了,更多相關Android ViewPager1和ViewPager2使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論