Android IllegalStateException:绑定已清除

Android IllegalStateException:绑定已清除,android,android-viewpager,butterknife,Android,Android Viewpager,Butterknife,对viewpager自定义适配器上destroyItem的调用转到unbinder.unbind()(使用ButterKnife)。如果滚动速度慢,效果会很好,不可见的视图会像预期的那样被破坏。但是如果滚动速度很快,它会崩溃,出现以下情况(找到了关于相同错误的一些答案,但由于条件不同,无法从中获得任何信息。例如,我使用的不是片段) 适配器: public class AccessControlPagerAdapter extends PagerAdapter { private ArrayLi

对viewpager自定义适配器上destroyItem的调用转到unbinder.unbind()(使用ButterKnife)。如果滚动速度慢,效果会很好,不可见的视图会像预期的那样被破坏。但是如果滚动速度很快,它会崩溃,出现以下情况(找到了关于相同错误的一些答案,但由于条件不同,无法从中获得任何信息。例如,我使用的不是片段)

适配器:

public class AccessControlPagerAdapter extends PagerAdapter {

private ArrayList<AccessControlWidget> widgets;

public AccessControlPagerAdapter(ArrayList<AccessControlWidget> widgets) {

    this.widgets = widgets;
}

@Override
public Object instantiateItem(ViewGroup collection, int position) {

    collection.addView(widgets.get(position));
    return widgets.get(position);
}

@Override
public int getCount() {
    return widgets.size();
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View)object);
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == object;
}
公共类AccessControlPagerAdapter扩展了PagerAdapter{
私有ArrayList小部件;
公共访问控制页面编辑器(ArrayList小部件){
this.widgets=widgets;
}
@凌驾
公共对象实例化项(视图组集合,int位置){
collection.addView(widgets.get(position));
返回widgets.get(位置);
}
@凌驾
public int getCount(){
返回widgets.size();
}
@凌驾
公共项(视图组容器、int位置、对象){
container.removeView((视图)对象);
}
@凌驾
公共布尔值isViewFromObject(视图,对象){
返回视图==对象;
}
}

以及ViewPager中包含的对象的基类:

public abstract class BaseMVPViewView<BASEVIEW extends BaseMVPView, ACTIONS extends ViewActions> {

protected final BASEVIEW baseview;
protected ACTIONS actions;
private Unbinder unbinder;

public BaseMVPViewView(BASEVIEW baseview) {
    this.baseview = baseview;
    actions = getDefaultActions();
}

protected abstract ACTIONS getDefaultActions();

public void bind() {
    unbinder = ButterKnife.bind(this, baseview);
}

public void onAttachedToWindow() {
}

public void onDetachedFromWindow() {
    unbinder.unbind();
}

public void onInit() {

}

public void setActions(@NonNull ACTIONS actions) {
    this.actions = actions;
}

public void showError() {
    Toast.makeText(baseview.getContext(), R.string.error_ocurred, Toast.LENGTH_LONG).show();
}
公共抽象类BaseMVPViewView{
受保护的最终BASEVIEW BASEVIEW;
受保护的行动;
私人无障碍者;
公共BaseMVPViewView(BASEVIEW BASEVIEW){
this.baseview=baseview;
actions=getDefaultActions();
}
受保护的抽象操作getDefaultActions();
公共无效绑定(){
unbinder=ButterKnife.bind(这是baseview);
}
公共空间和附加的Towindow(){
}
公共无效onDetachedFromWindow(){
unbinder.unbind();
}
公共无效onInit(){
}
public void setActions(@NonNull ACTIONS){
这个动作=动作;
}
公共图书馆(ROR){
Toast.makeText(baseview.getContext(),R.string.error_ocurred,Toast.LENGTH_LONG).show();
}

}

在阅读相关内容后,发现这是讨论问题的地方。我想捕捉异常,看看会发生什么,我想现在有些听众仍然挂在记忆中,没有被清除。我的viewpager仅使用4个视图,因此危险似乎很小,应用程序不再崩溃:

public void onDetachedFromWindow() {
    try {
        unbinder.unbind();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    }
}
public void onDetachedFromWindow() {
    try {
        unbinder.unbind();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    }
}