美文网首页
ButterKnife Fragment 异常 java.lan

ButterKnife Fragment 异常 java.lan

作者: Seachal | 来源:发表于2021-01-28 15:03 被阅读0次

    使用 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();
        }
    

    相关文章

      网友评论

          本文标题:ButterKnife Fragment 异常 java.lan

          本文链接:https://www.haomeiwen.com/subject/jczttltx.html