viewpager+fragment,从网络请求数据,快速滑动后内部view方法报空指针

1.情景如题,缓慢滑动等待一个页面加载设置完成后就不会报错
代码遵循mvp结构

public class QuestionAnalyzeFragment extends BaseFragment implements QuestionView{
    @BindView(R.id.tv)
    TextView mTv;
    @BindView(R.id.iv)
    ImageView mIv;
    //.....一些其控件绑定
    private View mRootView;
 @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (mRootView == null) {
            mRootView = inflater.inflate(R.layout.fragment_question, container, false);
            ButterKnife.bind(this, mRootView);
            mPresenter = new Presenter(this);
            //获取网络数据
            mPresenter.getData();
        }
        mUnbinder = ButterKnife.bind(this, mRootView);
        return mRootView;
    }
    //数据返回
    @Override
    public void onGetData(Data data){
        mTv.setText(data.getSomeText());
        Glide.with(context)
    .load(data.getUrl())
    .into(mIv);
    }
    
    @Override
     public void onDestroyView() {
        super.onDestroyView();
        mUnbinder.unbind();
    }
}

2.报错:数据返回里使用到的tabLayout,ImageView,在newTab和glide方法都出现了偶现报错。

3.个人猜测是因为快速滑动,数据获取发出了,而数据返回后,需要set数据的控件所在的fragment已经onDestroyView()了。
但是没想好解决方案

阅读 3.3k
1 个回答

网络异步加载更新View可能会导致你说的情况,方案:
1.ViewPager的setOffscreenPageLimit方法提高预加载数量,保证滑动时不会销毁fragment,缺点仅限于有限级加载
2.对网络请求下手,销毁页面的同时取消网络请求
3.网络请求成功,判断是否销毁再行更新View

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题