ViewPager + FragmentStatePagerAdapter未按预期工作

问题描述 投票:2回答:1

有很多类似的问题,但没有一个解决了我的问题。

我在我的应用程序中嵌套了ViewPagers和嵌套的FragmentStatePagerAdapters。

详细信息,创建第一个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中显示它们。如果需要,我也会发布课程。

我真的不知道该怎么做,似乎没什么用。任何形式的帮助将非常感谢,谢谢!

android android-fragments android-viewpager fragmentstatepageradapter
1个回答
7
投票

对于嵌套片段,您必须使用getChildFragmentManager()

改变这一行:

new MyFragmentAdapter(getFragmentManager());

至 :

new MyFragmentAdapter(getChildFragmentManager());
© www.soinside.com 2019 - 2024. All rights reserved.