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