TabLayout 切换 Tab 滚动问题解决方法:TabLayout 和 ViewPager 联动设置
TabLayout 切换 Tab 出现滚动问题?解决方法:TabLayout 和 ViewPager 联动设置
当你在使用 TabLayout 和 ViewPager 结合实现页面切换功能时,有时会遇到切换 Tab 时,页面会先滚动到原先的 Tab 位置,然后再滑到目标 Tab 的问题。这是因为 TabLayout 和 ViewPager 没有联动起来导致的。
为了解决这个问题,你需要在代码中设置 TabLayout 和 ViewPager 的联动,具体步骤如下:
-
在布局文件中添加 TabLayout 和 ViewPager。
-
在 Activity 或者 Fragment 中获取 TabLayout 和 ViewPager 的实例。
-
创建 ViewPager 的 Adapter,并将 Adapter 设置给 ViewPager。
-
将 ViewPager 和 TabLayout 进行关联,使用
TabLayout.setupWithViewPager(ViewPager)方法即可。 -
最后,在 Adapter 的
getItem()方法中返回每个 Fragment 的实例,这样 ViewPager 才能正常切换。
参考代码:
// 获取 TabLayout 和 ViewPager 的实例
TabLayout tabLayout = findViewById(R.id.tab_layout);
ViewPager viewPager = findViewById(R.id.view_pager);
// 创建 ViewPager 的 Adapter
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new Fragment1(), 'Tab1');
adapter.addFragment(new Fragment2(), 'Tab2');
adapter.addFragment(new Fragment3(), 'Tab3');
// 将 Adapter 设置给 ViewPager
viewPager.setAdapter(adapter);
// 将 ViewPager 和 TabLayout 进行关联
tabLayout.setupWithViewPager(viewPager);
// Adapter 中的 getItem() 方法返回每个 Fragment 的实例
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@NonNull
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
通过以上设置,TabLayout 和 ViewPager 就会联动起来,切换 Tab 时就不会出现滚动问题了。
原文地址: https://www.cveoy.top/t/topic/oJOA 著作权归作者所有。请勿转载和采集!