前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ButterKnife Fragment java.lang.IllegalStateException: Bindings already cleared.

ButterKnife Fragment java.lang.IllegalStateException: Bindings already cleared.

原创
作者头像
Seachal
修改2021-01-28 15:09:02
5410
修改2021-01-28 15:09:02
举报
文章被收录于专栏:Seacahl

使用 ButterKnife 从 7.x.x 升级到 10.x.x 后,某个 viewPager 中的

的 Fragment 方法报以下错误:

```

java.lang.IllegalStateException: Bindings already cleared.

```

查看代码git历史,是从

```

ButterKnife.unbind(this);

```

变为了

```

unbinder.unbind();

```

**然后**发现,

父类:

```

@Override

public void onDestroyView() {

super.onDestroyView();

unbinder.unbind();

}

```

子类

```

@Override

public void onDestroyView() {

super.onDestroyView();

unbinder.unbind();

}

```

中都调用了 `unbinder.unbind();`

猜测是因为父类已经执行过`unbind()`了,子类再去执行unbind()引发的异常。

所以跳进` unbind()` 查看源码:

```

public interface Unbinder {

@UiThread void unbind();

Unbinder EMPTY = () -> { };

}

```

选中`unbind`,然后用快捷键 option+command+B,跳到实现中:

```

@Override

@CallSupe

public void unbind() {

AbsWebViewActivity target = this.target;

if (target == null) throw new IllegalStateException("Bindings already cleared.");

this.target = null;

target.mWebView = null;

target.tvLoadFail = null;

target.btnLoadAgain = null;

target.llLoadError = null;

target.llProgressbar = null;

}

```

果然发现了`new IllegalStateException("Bindings already cleared.");`

所以子类删除 `unbinder.unbind()`就可以了,子类修改如下:

```

@Override

public void onDestroyView() {

super.onDestroyView();

// unbinder.unbind();

}

```

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档