Viewpager 中Fragment 数据滑动加载 闪退问题

问题一:在做如下页面的时候才出现了一些bug,首先第一个bug是下拉刷新的过程太快导致出现闪退,根据我自己的例子,我觉得出现这个问题的原因在于,我下拉刷新的时候会执行把list中的数据全部移除,然后远程获取数据再加入,然后再调notifyDataSetChanged()更新adapter,因为这个bug不太容易出现,所以你测试的时候需要刷新的同时很快的进行下滑,导致可能是在数据删除或是在加入的时候没有新的数据的补充导致了闪退,所以容易想到的办法就是判断何时刷新完才可以滑动屏幕,网上有这样的办法,这个的确可以成功,所以采用,如果有更合适的办法再更新。关键代码如下,设置recyclerview触摸监听,

设置变量 isloading 如何是在加载则返回true 就不可滑动,反之。

      recyclerView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(isloading){
                    return true;
                }else {
                    return false;
                }
            }
        });

问题二:在page切换的过程中,如page1切换到page2 再切换到page3,再切换回page1 此时就会发生闪退,先分析这个过程,因为我没有经过别的设置所以打开进入page1会预加载page1和page2 然后切换到page2会加载page3 ,到page3时,会加载page4(如果有),同时会关闭page1,当再滑到page2的时候,发生闪退,原因应该是此过程再次加载了page1,这个过程中第一次加载的page会执行getitem这个函数,并存入缓存,第二次加载的page不会执行getitem,我猜想我闪退的原因是:因为我的数据的刷新和加载在oncraeteview中,所以在每次预加载的时候都会执行,但是第二次也就是最后闪退的时候(页面在page2时)预加载page1和缓存的 产生了冲突,据说是在加载的时候数据是空的导致的,存在这个可能性,因为我在加载的过程中的一个操作是先删除数据再添加数据,最后闪退了,解决办法是让数据不在oncreateview的时候加载,而是在setUserVisibleHint()

中加载,这个函数的意思是当前page是可见page时,就解决了,因为我在页面下拉刷新是可以的,相当于我每到一个页面就执行了刷新。代码如下:

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(getUserVisibleHint()) {
            //加载数据
        }

    }

发布了73 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/daguniang123/article/details/88839552
今日推荐