android – 销毁ViewPager和FragmentStatePagerAdapter上的页面

我们正在尝试创建一个基于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();

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...