接个吻. 2022-06-27 15:46 采纳率: 93.1%
浏览 53
已结题

Android开发ViewPager+Fragment嵌套ViewPager页面不显示的问题

问题:
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();
    }
}

运行效果如下:

img

  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 7月7日
      • 已采纳回答 6月29日
      • 修改了问题 6月27日
      • 创建了问题 6月27日

      悬赏问题

      • ¥15 ubuntu18.04 tty报错&tty界面su/sudo命令无法执行,如何解决?
      • ¥20 关于c语言网络编程,实现传文件和即时聊天
      • ¥20 下面的压缩方法是否可行
      • ¥15 结构体数组读取文件信息失败,读取不了
      • ¥15 kaldi thchs30 训练遇到问题
      • ¥15 shellter无法使用,如何解决?(操作系统-kali)
      • ¥15 matlab动态模态分解程序
      • ¥60 关于渗透及远控的几个问题
      • ¥15 python文本词汇出现次数统计
      • ¥15 使用按键和串口,记录按键在不消抖的情况下触发的次数