ViewPager 在返回时跳过视图留空

Iva*_*del 4 java user-interface android view android-viewpager

我正在制作一个具有 4 个主要视图的应用程序。我希望所有这些都保留在顶部的 LIST 菜单上(现在可以了)。

使用 Fragments,我可以在不实际转到其他活动的情况下更改视图,但是由于我的一个视图有一个 ViewPager,它根本无法工作(当我第一次加载视图时,内容还可以,但是在第二个时间,ViewPager 上的视图消失,只有当我离开 2 个索引位置并返回时才会出现)(见图片,显示第一次加载时间,然后第二次)

在此处输入图片说明

请注意,ViewPager 不是要显示菜单项,它实际上是当前菜单项的 Fragment 的一部分(在这种情况下,“Simula'c~ao”)

我的问题是:这是一个已知问题,是否有简单的方法可以解决,或者我必须以其他方式解决?我已经在互联网上搜索过这个问题,但对我没有任何作用(无效,设置getItemPosition返回POSITION_NONE......)

我查看了 ViewPager 类,似乎一切正常,我对其进行了修改,以便每次渲染视图时,它都会强制渲染所有内容,但这种方式都不起作用。

我试图将可见性设置为 GONE 和 VISIBLE

我试图分离和连接适配器

试图缓存视图,并返回缓存。

似乎奏效的一件事:改变手机的方向。那奏效了。

尝试了很多我什至记得的事情......我对此有点生气,因为过去的24小时根本没有帮助我解决这个“谜团”。我希望你们中的一些人可以 =]

我的代码:https : //www.dropbox.com/s/u4mlxr3k6ta9yrm/MainActivity.java https://www.dropbox.com/s/2dqfnzjs2wl89hj/SimulationFragment.java

浏览次数:https : //www.dropbox.com/s/d6ruc1zjovqu6ob/activity_main.xml https://www.dropbox.com/s/lp1iea13klr77iq/activity_simulation.xml https://www.dropbox.com/s/1mkl3jqmo7g4wh8/ item_simulation.xml

Iva*_*del 5

好吧,经过很长时间试图发现这到底是怎么回事之后,@anup-cowkur 引导我找到了一条可以解决我的问题的道路。

起初,我认为问题出在PageView,我下载了支持库,编辑,更改了很多东西,但问题不存在。

事实上,问题出在FragmentPagerAdapter. 他对每个ViewPager片段使用一种“缓存” 。因此,当我返回视图时,他没有被“通知”,导致父视图中显示的最后一个片段“实际上”不存在(在这种情况下,主片段,它包含来自 ViewPager 的我的其他片段)。

由于它们是在 FragmentManager 上注册的,我所做的是侵入 FragmentPagerAdapter,实现此方法:

FragmentPagerAdapter.java

public void clear(ViewGroup container){
    if (mCurTransaction == null) {
        mCurTransaction = mFragmentManager.beginTransaction();
    }

    for(int i = 0; i < getCount(); i++){

        final long itemId = getItemId(i);

        // Do we already have this fragment?
        String name = "android:switcher:" + container.getId() + ":" + itemId;
        Fragment fragment = mFragmentManager.findFragmentByTag(name);

        if(fragment != null){
            mCurTransaction.detach(fragment);
        }
    }
    mCurTransaction.commitAllowingStateLoss();
    mCurTransaction = null;
}
Run Code Online (Sandbox Code Playgroud)

然后,在我的“onCreate”上调用它:

myPagerAdapter.clear(mViewPager);

完毕。所有片段都被强制从 FragmentManager 中删除,导致“缓存”消失。

这不是最好的解决方案,而是唯一有效的解决方案。

编辑 您可以在这里找到孔文件: http : //pastebin.com/07adWVrr