我们正在尝试创建一个基于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时,创建的第二页将是正确的蓝色。
答案 0 :(得分:13)
当您处理ListView并更改适配器的基础数据时,请调用notifyDataSetChanged()
,任何反映数据集的视图都将刷新自身。这就是你应该使用片段寻呼机适配器的方式。
在您的情况下,您不会通知适配器。但是,在FragmentPagerAdapter
/ FragmentStatePagerAdapter
的情况下,它没有区别,因为这些适配器默认忽略notifyDataSetChanged()
“。使其工作覆盖适配器实现中的getItemPosition()
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
正如已经说过的,在添加/删除片段之后调用(在showOtherPage()
中)
mAdapter.notifyDataSetChanged();