从 FragmentStatePagerAdapter 中删除页面会导致问题
Deleting page from FragmentStatePagerAdapter causes issues
我们的应用程序有多个片段来显示特定于位置的数据。我们使用了 FragmentStatePagerAdapter 和 ViewPager。用户也应该能够添加新页面和删除。虽然添加新页面工作正常,但删除现有页面会出现问题。当我确认我有 3 页时。我从左侧导航菜单中删除了第二个 button.When 我尝试滑动到第三页,它显示的是第二页的删除页面视图。并且它不显示第 3 页。
我在 return 新页面的位置覆盖了 getItem()。当我 added/deleted 新页面到 Adapter 时,我已经调整了 ItemCount。我在 add/delete 之前调用了 startUpdate(),destroy() 删除某个位置的任何片段对象,完成所有操作后调用 finishUpdate()。最后是 notifyDataSetChanged()。
看起来什么都没有遗漏,但有些东西。我仍然看到已删除片段的视图,旁边是空白页或类似内容,具体取决于我删除哪个位置的页面。
我看到 Removing fragments from FragmentStatePagerAdapter 是类似的东西,但对我的情况没有帮助。帮助我提供任何线索。
我可以解决。虽然 Wize 在这里 Replace Fragment inside a ViewPager 的回答没有解决我的问题,但我可以从中找到一些提示。我不得不重写 getItemPosition(Object object),它告诉系统 particulat 'object' 是 not-changed/no-more-exist。
我在本地也有片段(参考)列表,我根据 FragmentStateAdapter 维护的列表进行了修改,这是我的 getItemPosition() 代码:
@Override
public int getItemPosition(Object object) {
if (object instanceof myFragment) {
if (!mFragments.contains(object)) {
return POSITION_NONE;
} else {
return mFragments.indexOf(object);
}
}
return super.getItemPosition(object);
}
此外,我只在 add/delete 个片段后调用了 notifyDataSetChanged()。我删除了 startUpdate()、finishUpdate() 所有 that.I 不知道它们的确切使用位置。但没有它们也能奏效。
我们的应用程序有多个片段来显示特定于位置的数据。我们使用了 FragmentStatePagerAdapter 和 ViewPager。用户也应该能够添加新页面和删除。虽然添加新页面工作正常,但删除现有页面会出现问题。当我确认我有 3 页时。我从左侧导航菜单中删除了第二个 button.When 我尝试滑动到第三页,它显示的是第二页的删除页面视图。并且它不显示第 3 页。
我在 return 新页面的位置覆盖了 getItem()。当我 added/deleted 新页面到 Adapter 时,我已经调整了 ItemCount。我在 add/delete 之前调用了 startUpdate(),destroy() 删除某个位置的任何片段对象,完成所有操作后调用 finishUpdate()。最后是 notifyDataSetChanged()。
看起来什么都没有遗漏,但有些东西。我仍然看到已删除片段的视图,旁边是空白页或类似内容,具体取决于我删除哪个位置的页面。 我看到 Removing fragments from FragmentStatePagerAdapter 是类似的东西,但对我的情况没有帮助。帮助我提供任何线索。
我可以解决。虽然 Wize 在这里 Replace Fragment inside a ViewPager 的回答没有解决我的问题,但我可以从中找到一些提示。我不得不重写 getItemPosition(Object object),它告诉系统 particulat 'object' 是 not-changed/no-more-exist。
我在本地也有片段(参考)列表,我根据 FragmentStateAdapter 维护的列表进行了修改,这是我的 getItemPosition() 代码:
@Override
public int getItemPosition(Object object) {
if (object instanceof myFragment) {
if (!mFragments.contains(object)) {
return POSITION_NONE;
} else {
return mFragments.indexOf(object);
}
}
return super.getItemPosition(object);
}
此外,我只在 add/delete 个片段后调用了 notifyDataSetChanged()。我删除了 startUpdate()、finishUpdate() 所有 that.I 不知道它们的确切使用位置。但没有它们也能奏效。