2019-08-19 Viewpager 嵌套 Fragment 再嵌套 Fragment 里的recyclerView notifyDataSetChanged 无效

现在开发的项目使用Viewpager 为首页 里面又套了 ViewPager 做子类页。
遇到一个Bug 如果开始的时候在首页里切换里面的子类页是会正常请求更新的,没有什么问题。
但是如果先切到我的页面,然后再切回首页 切换里面的子类页 会请求数据 但是数据刷新 recyclerView 的Adapter 调用 notifyDataSetChanged 无效
需要手上下滑动recyclerView 才会刷新。
也可以把屏幕关闭再点亮这个Bug也会自动解除。
查了网上的一些说法,说是view.requestlayout 因为parent 没有刷新完成所以导致无效。
试了一下 调用 window.decorView.requestLayout() 但是并不能解决。
在不断试错之后 用了下面的方式解决 不过具体是什么原因引起的并不知道。
修改 FragmentPagerAdapter 的fragment 显示方式

   @NonNull
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        if (this.mCurTransaction == null) {
            this.mCurTransaction = this.mFragmentManager.beginTransaction();
        }

        long itemId = this.getItemId(position);
        String name = makeFragmentName(container.getId(), itemId);
        Fragment fragment = this.mFragmentManager.findFragmentByTag(name);
        if (fragment != null) {
            this.mCurTransaction.attach(fragment);



            // 添加下面的show方法调用
            this.mCurTransaction.show(fragment);
        } else {
            fragment = this.getItem(position);
            this.mCurTransaction.add(container.getId(), fragment, makeFragmentName(container.getId(), itemId));
        }

        if (fragment != this.mCurrentPrimaryItem) {
            fragment.setMenuVisibility(false);
            fragment.setUserVisibleHint(false);
        }

        return fragment;
    }

    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        if (this.mCurTransaction == null) {
            this.mCurTransaction = this.mFragmentManager.beginTransaction();
        }



     //   this.mCurTransaction.detach((Fragment)object);  修改成调用 hind
        this.mCurTransaction.hide((Fragment) object);
    }

有懂是什么原因的小伙伴请留言 谢谢。

你可能感兴趣的:(2019-08-19 Viewpager 嵌套 Fragment 再嵌套 Fragment 里的recyclerView notifyDataSetChanged 无效)