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()了。
但是没想好解决方案
网络异步加载更新View可能会导致你说的情况,方案:
1.ViewPager的setOffscreenPageLimit方法提高预加载数量,保证滑动时不会销毁fragment,缺点仅限于有限级加载
2.对网络请求下手,销毁页面的同时取消网络请求
3.网络请求成功,判断是否销毁再行更新View