【问题标题】:Android - Fragment inside a Fragment inside a ViewPager problemsAndroid - ViewPager 内的 Fragment 内的 Fragment 问题
【发布时间】:2015-11-15 01:17:00
【问题描述】:

在我的应用程序中,我有一个可旋转 4 个片段的视图寻呼机。其中一些片段内部还有其他片段。 Viewpager 第一次启动 Fragment 时它工作正常,但是如果我旋转并返回到前一个 Fragment,则内部 Fragment 无法显示(我注意到其中的 getActivity() 返回 null)。

例如,应用程序启动,我在 viewpager 中移动并查看所有主要片段,它们看起来很好,然后我向后滚动,每个具有内部片段的主要片段都无法正确显示。

我的 ViewPager 使用“FragmentStatePagerAdapter”,代码如下(例如变量名称)。

私有类 ContentPagerAdapter 扩展 FragmentStatePagerAdapter {

    public ContentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public Fragment getItem(int pos) {

        Fragment fragment = null;
        try {
            if (pos == POS1) {
                if (fragment1 == null) {
                    fragment1 = Fragment1.newInstance();
                }
                fragment = fragment1;
            } else if (pos == POS2) {
                if (fragment2 == null) {
                    fragment2 = Fragment2.newInstance(something);
                }
                fragment = fragment2;
            } else if (pos == POS3) {
                if ( fragment3 == null ) {
                    fragment3 = Fragment3.newInstance(something3);
                }
                fragment = fragment3;
            } else { //default
                if (fragment4 == null) {
                    fragment4 = Fragment4.newInstance(something4);
                }
                fragment = fragment4;
            }
        }catch (Exception e) {
            Log.e(AppConstants.APP_TAG, "Cannot create fragment", e);
            finish();
        }

        return fragment;
    }

    @Override
    public int getCount() {
        int count = 4;
        return count;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

【问题讨论】:

  • 我认为这可能与FragmentStatePagerAdapters 处理未使用片段的方式有关。它会破坏片段并将其从FragmentManager 中删除。尝试改用FragmentPagerAdapter,看看效果如何。
  • 我也发现了这个,如果你真的想保持资源友好FragmentStatePagerAdapter,它似乎会有所帮助。 stackoverflow.com/questions/16960676/…
  • 我尝试了 FragmentPagerAdapter ,它似乎有所帮助,但只有一点点。只是几个片段起作用了,有些没有,经过几次旋转,甚至那些消失了
  • @jammaster - 确实!!!我在主片段(复制粘贴的受害者)中使用了简单的 getFragmentManager ......!!现在使用 getChildFragmentManager() 似乎可以正常工作。请把它写成答案,这样我就可以接受了:)

标签: android android-fragments android-viewpager


【解决方案1】:

在实例化PagerAdapter 时,使用getChildFragmentManager() 而不是getFragmentManager()。如果需要更多信息,类似的问题在这里解决了ViewPager in TabFragment not loading second time

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2014-08-11
    • 2018-03-31
    • 1970-01-01
    相关资源
    最近更新 更多