问题:
Android开发ViewPager2+Fragment,然后Fragment里面在嵌套ViewPager2+Fragment,第一层ViewPager的Fragment正常显示,第二层的ViewPager的Fragment无法显示内容,网上有说相似问题,Fragment的ViewPager要用getChildFragmentManager(),这个我一开始就是用getChildFragmentManager()的,依旧还是不显示,甚至连第二层ViewPager,new出来的Fragment都没有执行过。相关代码如下:
MainActivity的ViewPage:
ArrayList<Fragment> fragments = new ArrayList<>();
fragments.add(new Home());//添加Home的Fragment
fragments.add(new Dynamic());//添加Dynamic的Fragment
fragments.add(new Purchase());//添加Purchase的Fragment
fragments.add(new Me());//添加Me的Fragment
MainFragmentPagerAdapter mainFragmentPagerAdapter = new MainFragmentPagerAdapter(getSupportFragmentManager(),getLifecycle(),fragments);
viewPager.setAdapter(mainFragmentPagerAdapter);
viewPager.setUserInputEnabled(false);
Fragment的ViewPager:
ArrayList<Fragment> fragments = new ArrayList<>();
fragments.add(HomeRecommend.newInstance("哈哈"));//添加HomeRecommend的Fragment,为了测试这个问题暂时只创建了一个Fragment
fragments.add(HomeRecommend.newInstance("你好"));//添加HomeRecommend的Fragment,为了测试这个问题暂时只创建了一个Fragment
fragments.add(HomeRecommend.newInstance("牛逼"));//添加HomeRecommend的Fragment,为了测试这个问题暂时只创建了一个Fragment
fragments.add(HomeRecommend.newInstance("666"));//添加HomeRecommend的Fragment,为了测试这个问题暂时只创建了一个Fragment
HomeFragmentPagerAdapter mainFragmentPagerAdapter = new HomeFragmentPagerAdapter(getChildFragmentManager(),getLifecycle(),fragments);
homeViewPager.setAdapter(mainFragmentPagerAdapter);
HomeRecommend类被创建后执行的代码:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (root == null) {
root = inflater.inflate(R.layout.fragment_home_recommend, container, false);
}
initView();
initData();
System.out.println(meStringText + "被执行了");//meStringText就是HomeRecommend.newInstance()传进来的参数
//注意:我前面第二层ViewPager是有add了4个HomeRecommend的,但是他们一次都没有被打印出来
return root;
}
MainFragmentPagerAdapter和HomeFragmentPagerAdapter类的代码,两个类都是相同的代码,所以只贴一个出来
public class MainFragmentPagerAdapter extends FragmentStateAdapter {
private List<Fragment> fragmentList = new ArrayList<>();
public MainFragmentPagerAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle,List<Fragment> fragments) {
super(fragmentManager, lifecycle);
this.fragmentList = fragments;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return fragmentList.get(position);
}
@Override
public int getItemCount() {
return fragmentList.size();
}
}
运行效果如下: