简单介绍:用viewpager 里面有3个fragment。相互切换的时候报错(viewpager有回收fragment的机制)在第一次(第一次回收fragment正常)unbind的时候没有报错,第二次(第二次回收fragment报Bindings already cleared. )的时候就报错了。
检查代码发现第二次没有bind成功。
如图(第二创建fragment的时候rootview不为空导致代码有误,跟我bind的地方有关系)
改之前的代码
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle
savedInstanceState) {
log(" onCreateView");
if (mRootView == null) {
log(" onCreateView------>root is null");
mRootView = inflater.inflate(getLayoutRES(), container, false);
mUnbinder = ButterKnife.bind(this, mRootView);
initData();
initListener();
} else {
log(" onCreateView------>root not null");
// 二次加载删除上一个子view
ViewGroup viewGroup = (ViewGroup) mRootView.getParent();
if (viewGroup != null) {
viewGroup.removeView(mRootView);
}
}
if (mPrepareListener != null) {
mPrepareListener.prepare();
mPrepareListener = null;
}
改之后 将bind的操作移除判断条件----
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle
savedInstanceState) {
log(" onCreateView");
if (mRootView == null) {
log(" onCreateView------>root is null");
mRootView = inflater.inflate(getLayoutRES(), container, false);
initData();
initListener();
} else {
log(" onCreateView------>root not null");
// 二次加载删除上一个子view
ViewGroup viewGroup = (ViewGroup) mRootView.getParent();
if (viewGroup != null) {
viewGroup.removeView(mRootView);
}
}
if (mPrepareListener != null) {
mPrepareListener.prepare();
mPrepareListener = null;
}
mUnbinder = ButterKnife.bind(this, mRootView);
return mRootView;
}