一、问题背景
在实际开发中,我们经常遇到 ViewPager(父ViewPager) 中再嵌套一层 ViewPager (子 ViewPager)。但是子 ViewPager 往往不显示内容了,这是因为我们为其设置了错误的 FragmentManager ,才导致子 ViewPager 无法正常显示内容。
二、错误代码
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@NonNull
@Override
public Fragment getItem(int position) {
return tabFragments.get(position);
}
@Override
public int getCount() {
return tabFragments.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
// 解决 TabLayout 绑定 ViewPager 造成 TabLayout 不显示标题的问题
return tabs[position];
}
});
错误原因:在子 ViewPager 的FragmentPagerAdapter 构造方法参数中也使用了getSupportFragmentManager(),导致子 ViewPager 不能正常显示。
三、解决方法
setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentArrayList.get(position);
}
@Override
public int getCount() {
return fragmentArrayList.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
//解决 TabLayout 和 ViewPager 绑定后,TabLayout 不显示标题的问题。
return tabs[position];
}
});
把子 ViewPager 的适配器构造方法的参数换成从getSupportFragmentManager()换成getChildFragmentManager(),这样做即可解决上述问题。