java - ViewPager 在返回时跳过 View ,留空

标签 java android user-interface view android-viewpager

我正在制作一个包含 4 个主视图的应用。我希望所有这些都保留在顶部的 LIST 菜单中(现在没问题)。

使用 Fragments,我可以在不执行其他 Activity 的情况下更改 View ,但是由于我的一个 View 有一个 ViewPager,它根本不起作用(当我第一次加载 View 时,内容没问题,但是第二次,ViewPager 上的 View 消失,只有当我离开 2 个索引位置并返回时才会出现)(参见图片,第一次加载时间和第二次加载时间)

enter image description here

请注意,ViewPager 不会显示菜单项,它实际上是当前菜单项 fragment 的一部分(在本例中为“Simula'c~ao”)

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

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

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

我试过拆下适配器

尝试缓存 View ,并返回缓存。

有一件事情成功了:改变手机的方向。那行得通。

尝试了很多我什至记得的事情......我对此有点生气,因为过去的 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

最佳答案

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

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

其实问题出在FragmentPagerAdapter上。他为每个 ViewPager fragment 使用了一种“缓存”。因此,当我返回 View 时,他没有得到“通知”,导致显示的最后一个 fragment “实际上”不存在于父 View 中(在这种情况下,主要 fragment ,它包含我来自 ViewPager 的其他 fragment ).

因为它们是在 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;
}

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

myPagerAdapter.clear(mViewPager);

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

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

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

关于java - ViewPager 在返回时跳过 View ,留空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601048/

相关文章:

java - Java7 nio2 有任何可用的内存文件系统实现吗?

java - 我有这个错误 java.lang.NoSuchMethodError

java - 使用 Java 的进程生成器生成多个进程

android - 是否可以在 Android 应用程序中使用 extendAccessTokenIfNeeded 扩展 Facebook token ?

android - 在 EditText 中禁用换行符(输入键),但使其在长字符串上垂直扩展

java - 使用 ArrayLists 时如何处理深度递归?

java - 如何确保onBind在bindService之后被调用

user-interface - 如何删除在borderpane上添加的Fragment()?

android - 获取半透明Android导航栏的位置和可见性

linux - 在嵌入式系统中使用的服务器和客户端编程语言和框架