ViewPager + FragmentPagerAdapter 实现浏览器多窗口遇到的坑

在使用webView开发一个简易浏览器的过程中,需要完成一个浏览器多窗口的功能,我选择使用Viewpager + FragmentPagerAdapter 来实现该功能,但是开发过程中,遇到了下面这两个彼此冲突的问题:

     1.   可以成功新建或删除窗口,但是,在新建或删除一个窗口时,其他Fragment中的内容会被刷新,作为浏览器,这样的效果无法令人接受。

     2.  Fragment中内容不刷新,但是,当前已经被删除的Fragment的视图却依旧保留在屏幕上,而且,接下来新建的一个窗口会使用这个本应该被删除的Fragment的视图,这个效果同样无法令人接受。

   这两种bug互相冲突,上网查找了很多方法,有说重写instantiateItem方法的、有说重写getItemPosition方法的,也有说重写destroyItem的,可能是我重写的方式不对,都没能解决上面两个bug。

      后来我在 继承了FragmentPagerAdapter的自定义adapter 中重写了getItemId方法,就成功解决了这个问题,代码如下:

@Override
    public long getItemId(int position) {
        return fragments.get(position).hashCode();
    }

     重点就是return的这个 .hashCode() , FragmentPagerAdapter里在根据getItemId(int position)来判断当前position里Fragment是否存在,如果存在,则不会创建亦不会更新,那么要让FragmentPagerAdapter的更新生效,那在getItemId(int)里根据数据返回一个唯一的数据ID,当FragmentPagerAdapter更新时,数据ID改变了,那么Fragment就会调用getItem(int)去获取Fragment,达到更新效果。

   Android新手,如有不足之处,请多多包涵!

  解决方案来源文章:https://www.jianshu.com/p/19b5d2c9afb5

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值