使用 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 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有