java.lang.IllegalStateException: Bindings already cleared.
使用 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
@CallSuper
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();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/253946.html
標籤:Android
上一篇:Android直播聊天滾動串列
下一篇:java.lang.IllegalStateException: Bindings already cleared. 2021-01-28
