Android的ViewPager中移除Fragment
16lz
2021-01-26
使用场景
点击按钮删除当前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都不一样,防止从缓存中获取。
更多相关文章
- 加快Android(安卓)Stduio编译速度方法之一
- Android系统详解之获取图片和视频的缩略图
- 【Android】结束活动退出程序的方法
- Android(安卓)Handler的使用!!!
- Android中实现圆角图片的几种方法
- Android(安卓)获取、移除 View 的 OnClickListener
- Android(安卓)Connectivity分析(1)- ConnectivityManager
- Android中获取应用程序(包)的大小-----PackageManager的使用(二)
- Android(安卓)adapter has changed解决方法