9

我们正在尝试创建一个基于 ViewPager 的 Android 应用程序,该应用程序在运行时接收添加和删除页面的指令。几乎就像选项卡式浏览器体验一样,您可以删除当前选项卡或删除特定选项卡。

根据 Google 文档,我们使用 FragmentStatePagerAdapter,它旨在用于有大量页面的情况,更像是列表视图。

但是当我们尝试: - 删除一个不在屏幕上的页面 - 并从同一个类中创建一个新的片段对象 - 并在页面的相同位置被删除我们注意到 Android 平台恢复了死页并显示给用户。我们刚刚创建的新对象根本不运行“onCreate”、“onCreateView”或“onActivityCreated”。

我们正在寻找解决此问题的方法,迫使平台使用来自同一类的新片段对象。有任何想法吗?

我们发现,如果我们销毁当前页面,平台确实会销毁该页面并从同一类创建一个新对象。这是一个复制问题和此行为的小示例。

来源:http ://dl.dropbox.com/u/8333012/SimpleAdapter/SimplePager.zip

视频:http ://www.youtube.com/watch?v=-oaXXwU8PSI&hd=1

从这个项目中,当您触摸第一页上的 TextView 时,它旨在将第二页(绿色)删除到新的蓝色页面。你会看到,即使从第一页开始,第二页仍然是绿色的。但是,当您按下第二页(绿色)上的返回 Android 按钮并触摸 TextView 时,创建的第二页将是正确的蓝色。

4

1 回答 1

13

当您处理 ListView 并更改您调用的适配器的底层数据时notifyDataSetChanged(),任何反映数据集的 View 都会自行刷新。这也是您应该使用片段寻呼机适配器的方式。

在您的情况下,您没有通知适配器。但是,如果是FragmentPagerAdapter/FragmentStatePagerAdapter它并没有什么不同,因为这些适配器notifyDataSetChanged()“默认”忽略。为了让它工作覆盖getItemPosition()你的适配器实现

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

正如已经说过的,在您添加/删除片段调用之后(在您的showOtherPage()

mAdapter.notifyDataSetChanged();
于 2012-04-06T01:11:44.810 回答