Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ButterKnife Fragment java.lang.IllegalStateException: Bindings already cleared.

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

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

使用 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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
锦囊篇|一文摸懂ButterKnife
于2020年3月26号,Jack Wharton 官宣 ButterKnife 废弃了。但是我们就没有必要去学习了吗?显然并不是这样的,一个开源库背后的每一分思想和技术都是我们应该去探究的点。
ClericYi
2020/06/23
8610
O3-开源框架使用之Butterknife 8.8.1及源码浅析
cast()方法是Clazz的一个公共方法:由下可见它反会一个由传入值强转成的T类型对象
张风捷特烈
2018/09/11
5030
O3-开源框架使用之Butterknife 8.8.1及源码浅析
项目需求讨论— ButterKnife初级小结
在没有使用DataBinding之前,我的项目都是使用ButterKnife,当然对于ButterKnife大家估计都熟悉的不要太熟悉了。本文我也就当自己的一个总结。
青蛙要fly
2018/08/29
4080
项目需求讨论— ButterKnife初级小结
Android ButterKnife(黄油刀)的使用
1.在Setting->Plugins中输入butterknife——>添加插件Android ButterKnife Aelezny ——>点击安装。 2.dependencies中添加依赖:
八归少年
2022/06/29
1.6K0
ButterKnife源码分析
在程序开发的过程中,总会有一些场景需要去写重复冗余的代码。而程序员一般都是懒惰了(懒惰促使人进步 ο ),所以就出现了很多可以减少重复工作的框架或者工具。比如今天要分析的主角—— ButterKnife ,如果你做 Android 开发却没有听说过 ButterKnife 那就 Out 啦。ButterKnife 使用依赖注入的方式来减少程序员去编写一堆 findViewById 的代码,使用起来很方便。那么接下来就一步步地带你深入理解 ButterKnife 框架。PS:最近写的博客篇幅都有点长,请耐心阅读!Logo 图镇楼!
俞其荣
2022/07/28
3510
ButterKnife源码分析
Android开源框架源码解析系列(3)——ButterKnife源码解析
ButterKnife是一个专注于Android系统的View注入框架,有了ButterKnife可以很轻松的省去findViewById,ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class,对运行时性能没有影响,本篇我们来详细学习一下它的源码。
老马的编程之旅
2022/06/22
1K0
手写 ButterKnife BindView
先建三个module,分别为Butterknife ButterKnife-Annotions ButterKnife-compiler,其中butterknife为Android Module其余的都是Java Module 。
曾大稳
2018/09/11
5880
ButterKnife原理解析看这篇文章就够了
ButterKnife 算是一款知名老牌 Android 开发框架了,通过注解绑定视图,避免了 findViewById() 的操作,广受好评!由于它是在编译时对注解进行解析完成相关代码的生成,所以在项目编译时会略耗时,但不会影响运行时的性能。接下来让我们从使用到原理一步步深入了解这把黄油刀的故事! 以下内容基于 butterknife:8.8.1 版本,主要包括如下几个方面的内容:
用户1269200
2018/08/14
2.4K0
【Android APT】编译时技术 ( ButterKnife 原理分析 )
APT ( Annotation Processing Tool ) 注解处理工具 ;
韩曙亮
2023/03/29
5360
Butter Knife用法总结
早就听过Butter Knife这个神器,公司最近新开了一个项目,用到了这个框架,但也只是简单使用自动绑定控件,昨天抽时间看了下官网,发现这个框架还可以做其他很多的工作,来提高开发效率,总结一下常用用法。 一 导入 dependencies { compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' } 目前最新版为8.5.1 二 用法
coderZhen
2018/06/28
6580
butterknife 源码分析
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/71512754
程序员徐公
2018/09/17
9850
butterknife 源码分析
TabLayout基本使用
Tablayout继承自HorizontalScrollView,可以用作顶部标签效果、底部导航栏效果。一般多与ViewPager一起使用。
用户3030674
2019/04/01
1.3K0
感受LiveData与ViewModel结合之美
虽说这篇是说LiveData与ViewModel,但是或多或少都有涉及另外一个组件:Lifecycles 。它们连同Room都是在17年谷歌IO大会推出的,当时还是预览版,大致17年底时推出了正式版。到今年的IO大会过后,又增加了许多新成员。
用户1269200
2018/08/14
8920
感受LiveData与ViewModel结合之美
手把手教你封装一个健壮的MVP框架,面向接口开发。
在我们的日常开发中,我们都知道 Android 端的开发框架有 MVC,MVP,MVVM,说起这几个框架,大家也肯定都有自己的看法,甚至很多同学也都封装过。
Petterp
2022/02/09
4280
手把手教你封装一个健壮的MVP框架,面向接口开发。
Butterknife全方位解析
Butterknife是供职于Square公司的JakeWharton大神开发的开源库,使用这个库,在AS中搭配Android ButterKnife Zelezny插件,可以大大提高开发的效率,从此摆脱繁琐的findViewById(int id),也不用自己手动@bind(int id) , 直接用插件生成即可。本篇博客将对Butterknife进行深入解析。
老马的编程之旅
2022/06/22
7430
Butterknife全方位解析
浅析ButterKnife
不管是Android开发的老司机也好,新司机也罢,想必大家都对findViewById这种样板代码感到了厌倦,特别是进行复杂的UI界面开发的时候,这种代码就会显的非常的臃肿,既影响开发时的效率,又影响美观。 俗话说,不想偷懒的程序猿不叫工程师,那有什么方法可以让我们写这样的代码更加的有效率呢? 使用依赖注入框架 如果你不想写那些无聊的样板代码,那么你可以尝试一下现有的依赖注入库。ButterKnife作为Jake Wharton大神写的开源框架,号称在编译期间就可以实现依赖注入,没有用到反射,不会降低程序性
QQ音乐技术团队
2018/01/31
8950
浅析ButterKnife
深入理解 ButterKnife,让你的程序学会写代码
前言 话说我们做程序员的,都应该多少是个懒人,我们总是想办法驱使我们的电脑帮我们干活,所以我们学会了各式各样的语言来告诉电脑该做什么——尽管,他们有时候也会误会我们的意思。 突然有一天,我觉得有些代码其实,可以按照某种规则生成,但你又不能不写——不是所有的重复代码都可以通过重构并采用高端技术比如泛型来消除的——比如我最痛恨的代码: TextView textView = (TextView) findViewById(R.id.text_view); Button button = (Button) fin
腾讯Bugly
2018/03/23
1.1K0
深入理解 ButterKnife,让你的程序学会写代码
探究Android中的注解
注解是我们经常接触的技术,Java有注解,Android也有注解,本文将试图介绍Android中的注解,以及ButterKnife和Otto这些基于注解的库的一些工作原理.
技术小黑屋
2018/09/05
8130
TabLayout+ViewPager+Fragment实现切页展示「建议收藏」
目前大多数的APP都采用的是几个Tab标签以及多个界面滑动的形式来提供多层次的交互体验,最为常用的做法就是采用TabLayout+ViewPager+Fragment的方式,最近在公司项目中遇到类似的界面,也看了各个论坛很多份博客,但是发现都没有完全把这种方法的坑填完,因此写下这篇博客,一方面是对知识的总结,另一方面也能让其他开发者们少走一些弯路,博客内容主要分为四个章节:
全栈程序员站长
2022/09/15
3.5K0
TabLayout+ViewPager+Fragment实现切页展示「建议收藏」
Android | xml和view的那些事
嗨,我是写博客满脑子骚东西的哈利迪~今天和大伙聊聊Android中的xml和view的那些事,首先会分析一下xml布局解析inflate的流程,然后会介绍一些业内的方案,如:
Holiday
2020/08/07
2.1K0
Android | xml和view的那些事
相关推荐
锦囊篇|一文摸懂ButterKnife
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档