一起Talk Android吧(第三百七十五回:如何使用ViewPager2)

各位看官们,大家好,上一回中咱们说的是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的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
ViewPager2 中,由于 Fragment 的生命周期和 ViewPager2 的切换行为,可能会导致 Fragment 中的调为空。这是因为 ViewPager2 预加载了附近的 Fragment,并且在切换页面时,Fragment 的生命周期可能不会按预期顺序执行。 为了解决这个问题,你可以尝试使用 ViewPager2.OnPageChangeCallback 来监听 ViewPager2页面切换事件,并在页面切换时触发调方法。以下是一个示例: ```java public class MyFragment extends Fragment { private OnItemClickListener listener; // 定义调接口 public interface OnItemClickListener { void onItemClick(int position); } // 设置监听器 public void setOnItemClickListener(OnItemClickListener listener) { this.listener = listener; } // ... @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // ... // 获取 ViewPager2 ViewPager2 viewPager2 = requireActivity().findViewById(R.id.viewPager2); // 设置页面切换监听viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { // 页面切换时触发调 if (listener != null) { listener.onItemClick(position); } } }); } } ``` 在 Activity 或父 Fragment 中,你可以通过 setOnItemClickListener 方法来设置监听器,并在调方法中处理点击事件。例如: ```java MyFragment fragment = new MyFragment(); fragment.setOnItemClickListener(new MyFragment.OnItemClickListener() { @Override public void onItemClick(int position) { // 处理点击事件 } }); ``` 通过这种方式,你可以在 ViewPager2 中的 Fragment 中实现调,并处理页面切换事件。确保在合适的时机设置监听器,以及在调方法中处理点击事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值