自己也是个小白一枚,在写项目时,碰到的问题,主页面一个viewpager有五个fragment,其中第一个fragment里,再嵌套一个viewpager加四个fragment ,还加入了tablayout的标签页功能,fragment复用同一个,new了四个对象,构造方法中传入不同的值,结果导致只有第一个fragment的recyclerview有数据,其他都为空白,数据加载和初始化方法都运行了,不是什么getChildFragmentManager的问题,最后终于找到了这个帖子
原文链接:https://blog.csdn.net/wht3xr/article/details/50457192
自己也记录一下
typeIds.add("推荐"); typeIds.add("创意"); typeIds.add("设计"); typeIds.add("公益"); typeIds.add("动漫"); for (String s: typeIds){ HomeNewsFragmentSecond fragmentSecond = new HomeNewsFragmentSecond(s); fragments.add(fragmentSecond); }
在使用Fragment+ViewPager动态添加N多相同Fragment时,出现了Viewpager的第一页重叠加载了所有fragments中的所有fragment,其余全是空白页面
这个蛋疼的问题纠结了一天,最终还是通过fragment的声明周期解决了这个问题
new MyFragment的时候需要再onActivityCreated之前将所有的View控件实例化,否则在fragments add以后View控件将保存最后一次实例化的状态,这就导致了所有fragments的内容重叠显示在Viewpager的第一页上
解决方案:
//将需要用到的空间在OnCreateView初始化 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // return inflater.inflate(R.layout.fragment_home_news_second, container, false); View view = inflater.inflate(R.layout.fragment_home_news_second, container, false); recyclerView = view.findViewById(R.id.rv_homeNews_two); return view; }
public HomeNewsFragmentSecond(String type){ this.type =type; }
之后adapter就正常写,正常用在fragment里就可以,就能实现复用效果了