android - ViewPager 切换 FragmentPagerAdapter

标签 android android-fragments android-viewpager

我有一个 ViewPager,它由一个 FragmentPagerAdapter 填充。我想从第一个适配器换成另外两个。问题是之前加载的所有页面(同时具有第一个适配器)仍然是旧页面。

我查看了FragmentPagerAdapter 的源代码,猜测问题的发生是因为instatiateItem() 实现。使用其中包含位置和容器 ID 的标签,该方法检查该位置是否已经有一个 Fragment。当有带有此标签的 Fragment 时,它会被附加。设置新适配器时容器 ID 和位置不会更改,因此它会找到旧的 Fragment

你知道删除所有旧 fragment 的方法吗?

最佳答案

我意识到 Fragment 标签使用的是通过 getItemId() 获取的 id 而不是位置。为了解决我的问题,我覆盖了 getItemId() 并在不同的 FragmentPagerAdapter 中使用了完全不同的 ID。

@Override
public long getItemId(int position) {
    return mPagerId*100+position;
}

mPagerId 是在构造函数中分配的唯一整数。如果您的页面超过 100 页,则应将 100 替换为 1000。

关于android - ViewPager 切换 FragmentPagerAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11671221/

相关文章:

android - 当 LauncherProvider.DatabaseHelper.convertDatabase(SQLiteDatabase db) 在 Android 默认启动器中返回 true 时?

android - fragment : which callback invoked when press back button & customize it

java - 是否需要在fragment onActivityCreated 方法中检查父 Activity 是否为空?

android - ViewPager fragment 中的 onPause() 不起作用

android - DynamicGridview 项目在 Viewpager fragment 之间拖放

java - 覆盖后退按钮以充当主页按钮

java - 检查 Firebase Android 中是否存在 ID

Android - 如何使用 asynctask android 获取 header 响应

java - 尝试通过 fragment 中的按钮按下来打开 Activity 。什么都没发生

android - Picasso 和 FragmentStatePagerAdapter 的内存泄漏