Android的ViewPager中移除Fragment

使用场景

点击按钮删除当前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都不一样,防止从缓存中获取。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值