使用场景

点击按钮删除当前ViewPager正在显示的Fragment,并将使用ViewPager显示被删除Fragment的上一个。

解决方案

在FragmentPagerAdapter的实现类中添加一下代码即可,即重写两个方法
    @Override        public long getItemId(int position) {            //确保返回的值唯一即可           return mDemoFragmentList.get(position).hashCode();        }        @Override        public int getItemPosition(Object object) {            //此Item不再显示            return POSITION_NONE;        }

两个方法理解

方法getItemPosition

触发删除操作时,首先根据索引从数据源移除对应的Fragment对象,然后当调用PagerAdapter.notifyDataSetChanged()时,接着调用ViewPager.dataSetChanged();在此方法中,遍历每一个Item,获取对应一个int值POSITION_NONE或者POSITION_UNCHANGED。如果返回POSITION_UNCHANGED,此方法会continue中止,之后的销毁Fragment操作不会执行,返回POSITION_NONE,反之。每个Item都返回POSITION_NONE,那么ViewPager就没有Fragment与它关联。

方法getItemId

接着对上一个方法的理解,当所有的item都返回POSITION_NONE方法时,所有的Fragment都从ViewPager中分离,那此时getCount()返回的数量大于0,所以ViewPager重新创建Item,而Adapter.instantiateItem会再次被调用,instantiateItem获取Fragment有两种方式,第一种是FragmentManager中获取(相当于获取缓存中的),第二种是再次调用getItem()获取新的Fragment同时添加到FragmentManager中,我们重写getItemId,每次返回的ItemID都不一样,防止从缓存中获取。

更多相关文章

  1. 加快Android(安卓)Stduio编译速度方法之一
  2. Android系统详解之获取图片和视频的缩略图
  3. 【Android】结束活动退出程序的方法
  4. Android(安卓)Handler的使用!!!
  5. Android中实现圆角图片的几种方法
  6. Android(安卓)获取、移除 View 的 OnClickListener
  7. Android(安卓)Connectivity分析(1)- ConnectivityManager
  8. Android中获取应用程序(包)的大小-----PackageManager的使用(二)
  9. Android(安卓)adapter has changed解决方法

随机推荐

  1. Android电话系统之-rild
  2. 设置Android设备按Power按键不休眠
  3. Android(安卓)匿名共享内存C接口分析
  4. 使用Scala编写Android应用程序
  5. 浅谈Android开机启动速度优化(含应用程序
  6. android ListView没有数据时信息显示
  7. Android是什么
  8. Android定制Home Screen
  9. Android(安卓)导入v7包常见错误
  10. Android(安卓)开发笔记(1)——Android(安