ViewPager2+TabLayout体验之旅

本文介绍了在项目中遇到ViewPager2与TabLayout配合使用时出现的问题,以及如何通过使用ViewPager2解决页面加载空白的状况。作者对比了传统的LazyFragment方法,并展示了在AndroidX项目中引入ViewPager2的步骤,同时给出了相关布局文件的代码示例,说明了ViewPager2在页面切换时的生命周期行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天项目刚上线,今天产品又要改需求...........

利用一点空隙时间整理了一下ViewPager2的使用

效果图

由于当前项目中用的懒加载 LazyViewPager 是别人开源的,时间也很久了并且现在使用发现了一些bug,配合 TabLayout使用,在页面初始化后,你从第一页点到第三页或者第四页有时候会出现当前页面加载空白问题!由于前段时间项目紧急就一直没有修改,现在刚上线就赶紧修改一下。

网上一搜都是自定义LazyFragment ,通过  getUserVisibleHint() 获取是否可见来封装处理,自己实现数据的懒加载,这样完全没问题,但是咱不是懒啊,听说新出来一个 ViewPager2,就新建来一个项目尝试一下。

新建项目是 AndroidX 项目,不是AndroidX 请绕行。

建好项目后 导入依赖

//ViewPager2的依赖
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha01'
//配合 TabLayout使用 所用到的相关辅助类
implementation "com.google.android.material:material:1.1.0"

这是中文官方文档,反正我是看不懂!

顺便说一下我的 minSdkVersion 是22的

编译后开始上手敲代码

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
Android中,ViewPager2配合TabLayout以及Fragment一起使用,可以创建一个非常常见的滑动导航栏和片段切换界面。这是一个流行的组合,用于构建像新闻应用、图片画廊或设置菜单这样的用户界面。 1. **设置布局**: - 在XML布局文件中,添加一个`RecyclerView`作为View Pager,并将其id设为`view_pager`。 - 同时添加一个`TabLayout`,通常放置在顶部,用于显示各个选项卡,id例如设为`tab_layout`. 2. **初始化组件**: - 创建一个`TabLayoutMediator`实例,将TabLayoutViewPager关联起来,动态管理标签和视图之间的对应关系。 ```java TabLayoutMediator mediator = new TabLayoutMediator(tabLayout, viewPager, viewPager::setAdapter); mediator.attach(); ``` 3. **创建FragmentPagerAdapter**: - 自定义一个`FragmentPagerAdapter`,它可以管理多个`Fragment`实例。 ```java class MyFragmentAdapter extends FragmentStateAdapter { //... @NonNull @Override public Fragment createFragment(int position) { return MyFragment.newInstance(position); // "MyFragment"是你自定义的Fragment类 } } ``` 4. **设置Adapter**: - 将`FragmentPagerAdapter`设置到`ViewPager`上。 ```java viewPager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager())); ``` 5. **处理Tab点击事件**: - TabLayout有内置的监听器,可以在选中新的标签时更新对应的Fragment。 ```java tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } //其他方法... }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值