有很多类似的问题,但没有一个能解决我的问题。
我在我的应用程序中嵌套了ViewPager
和嵌套FragmentStatePagerAdapter
。
详细说明,创建了第一个ViewPager(由4个片段适配器支持),其第一个片段包含其他3个片段。
我的问题是,基于某些事件,中间的片段根本没有显示。
应用程序启动后,所有内容都按预期正常运行并正确显示。
如果我在父ViewPager上切换页面,基于页面的行为是不同的:如果我从第一个(包含嵌套的ViewPager)到第二个然后回到第一个,那么一切都按预期工作;如果我转到任何其他页面然后回到第一页,则ViewPager首先完全透明但仍可刷卡。为了在屏幕上重新绘制视图,我必须从第1页到第3页滑动几次,但无论如何,第2片段都没有显示。它完全是透明的。
我已经阅读了很多类似的问题,但无法找到任何可行的修复方法。 我此刻非常困惑,我已经尝试了一切。
这是我的参考代码:
家长活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(...);
mCoordinatorLayout = (CoordinatorLayout) findViewById(R.id.feed_coordinator);
mFloatingActionButton = (FloatingActionButton) findViewById(R.id.feed_floating_upload);
mViewPager = (ViewPager) findViewById(R.id.feed_view_pager);
mTabLayout = (TabLayout) findViewById(R.id.feed_tab_layout);
setupViewPager(); // this sets adapter to viewpager
mTabLayout.setupWithViewPager(mViewPager);
setupTabLayout();
}
private class ParentPagerAdapter extends FragmentStatePagerAdapter {
public ParentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new Frag1();
case 1:
return new Frag2();
case 2:
return new Frag3();
case 3:
return new Frag4();
default:
return new Default();
}
}
@Override
public int getCount() {
return 4;
}
}
Frag1 非常相似:
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag1, container, false);
[...]
mViewPager = (ViewPager) view.findViewById(R.id....);
mLinearLayout = (LinearLayout) view.findViewById(R.id....);
mFragmentAdapter = new MyFragmentAdapter(getFragmentManager());
mViewPager.setAdapter(mFragmentAdapter);
return view;
}
private class MyFragmentAdapter extends FragmentStatePagerAdapter {
private static final int ITEMS = 3;
public MyFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
new Child1();
case 1:
new Child2();
case 2:
new Child3();
default:
return null;
}
}
@Override
public int getCount() {
return ITEMS;
}
}
3个孩子遵循一个非常简单的实现,他们从服务器获取数据并在RecyclerView中显示它们。如果需要,我也会发布课程。
我真的不知道该怎么做,似乎没什么用。 任何形式的帮助都会非常感谢,谢谢!
答案 0 :(得分:6)
对于嵌套片段,您必须使用getChildFragmentManager()
。
更改此行:
new MyFragmentAdapter(getFragmentManager());
致:
new MyFragmentAdapter(getChildFragmentManager());