文章目录

  • 使用步骤
  • 代码示例


各位看官们,大家好,上一回中咱们说的是Android中多线程之大结局的例子,这一回中咱们介绍的例子是如何使用ViewPager2。闲话休提,言归正转。让我们一起Talk Android吧!

使用步骤

看官们,我们在前面章回中介绍过ViewPage的用法,不过介绍的是第一版本,现在官方已经把ViewPager升级到第二版本:ViewPager2,本章回中主要介绍ViewPager2的用法。下面是具体的使用步骤,请大家参考:

  • 1.创建VeiwPager2对象;
  • 2.创建适配器并且绑定到ViewPager2对象上;
  • 3.给ViewPager2对象设定监听器以监听滑动事件;

我们和ViewPage第一版的使用方法对比一下就会发现第二版和第一版的使用方法几乎一样,不过它们背后技术不一样,ViewPager2使用了来缓冲管理的View,这样可以提高ViewPage的性能,再回想一下我们之前介绍过的RecyclerView,它的使用方法是不是也是和上面的这三个步骤类似?

代码示例

介绍完使用步骤后,大家可能觉得抽象,接下来我们通过文字结合代码的方式介绍一下详细的使用方法。

  • 1.创建ViewPager:
    首先创建一个Activitty或者Fragment并且在它的布局文件中添加ViewPager控件,然后在代码中创建Activity或者Fragment时,加载布局中的ViewPager;
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Fragment.FragmentTwo">

  <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/id_viewpage"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4">
    </androidx.viewpager2.widget.ViewPager2>
</FrameLayout>
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_two, container, false);
         mViewPager = (ViewPager2)view.findViewById(R.id.id_viewpage);

       return view;
    }
  • 2.创建三个空的的Fragment,它们用来滑动ViewPager时相互切换;
  • 3.创建FragmentStateAdapter类的子类并且重写其中的方法,详细如下:
  • 重写构造方法,它有多个构造方法,重写只有一个参数的构造方法就可以,重写时在构造方法中把步骤2中创建的三个Fragment添加到ArrayList中,此时添加的顺序就是显示时的顺序,可以修改添加顺序进而控制显示顺序;
  • 重写两个createFragment()和getItemCount()这两个重载方法。这样可以返回当前位置的Fragment,以及ViewPager管理的Fragment数量;
public class ViewPagerFragmentAdapter extends FragmentStateAdapter {
    private ArrayList<Fragment> mFragments = new ArrayList<>();

    public ViewPagerFragmentAdapter(@NonNull Fragment fragment) {
        super(fragment);
        mFragments.add(new Fragment1());
        mFragments.add(new Fragment2());
        mFragments.add(new Fragment3());
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        Fragment fragment = mFragments.get(position);

        return fragment;
    }

    @Override
    public int getItemCount() {
        return mFragments.size();
    }
}
  • 4.创建步骤3中的适配器对象并且绑定到ViewPager上;
  • 5.给ViewPager注册监听器,以监听ViewPager的滑动事件
@Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {
       // Inflate the layout for this fragment
       View view = inflater.inflate(R.layout.fragment_two, container, false);

       mViewPagerFragmentAdapter = new ViewPagerFragmentAdapter(this);
       mViewPager.setAdapter(mViewPagerFragmentAdapter);
       //这个必须写,不然会产生Fata
       mViewPager.setSaveEnabled(false);

       mViewPager.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);
           }

           @Override
           public void onPageScrollStateChanged(int state) {
               super.onPageScrollStateChanged(state);
           }
       });

       return view;
   }

看官们,上面列出的是核心代码,大家可以自己建立一个工程来动手试试,我们在这里就不建立工程演示了,因为它的运行效果和ViewPage的完全一样.如果有看官想看运行效果的话,可以参考ViewPage中的运行效果截图。

看官们,关于Android中如何使用ViewPager2的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!