使用ButterKnife 在开发中需要注意的地方

1.Gradle 配置

compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'

2.绑定

  • Activity 中使用,一定要在setContentView()之后再写 ButterKnife.bind(this);
  • Fragment 中使用
View contentView = (ViewGroup) LayoutInflater.from(getActivity()).inflate(R.layout.test, null);
ButterKnife.bind(this, contentView);
  • 自定义view中,与fragment相似
View contentView= LayoutInflater.from(getContext()).inflate(R.layout.test, this);
ButterKnife.bind(this,contentView);

3.解绑

public class BaseFragment extends Fragment {
    public static final String TAG = "BaseFragment";
    protected Unbinder mUnbinder;

    @Override
    public void onDestroyView() {
        if (this.mUnbinder != null) {
            this.mUnbinder.unbind();
        }
        super.onDestroyView();
    }
}

4.特别注意

在异步请求中,尤其是网络请求,一般异步回来网络结果时,我们需要更新UI,这个时候,如果界面已经调用了onDestroy()或者onDestroyView(),相当于页面已经销毁,调用了unbind()方法了,如果我们还有更新UI的话,就会报空指针异常。所以必须在异步回调里,来判断是否已经解绑,如果已经调用解绑了,那就不能再执行相关操作了。
方法是在unbind()之后将mUnbinder=null;
在异步回调时,首先判断mUnbinder==null,则return;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,025评论 25 709
  • 最近刚从旧公司离职,为面试在做准备,因为平时开发CV大法用得比较多,很多基础知识掌握得不是很牢靠以及很多工具框架只...
    黎清海阅读 6,660评论 1 19
  • 面试题总结 通用 安卓学习途径, 寻找资料学习的博客网站 AndroidStudio使用, 插件使用 安卓和苹果的...
    JingBeibei阅读 5,675评论 2 21
  • 文 | 晨光花开 总是否定自己的人生,注定会一无所有。 我曾经崇拜过的偶像,因为曾经说过很多很多正能量的话,在话中...
    晨光花开阅读 3,434评论 0 2
  • 如果穷忙,加班加点拼命干活,还做着自己不喜欢的事情。那么打工仔和奴隶有什么区别?
    BHeart阅读 1,400评论 0 0

友情链接更多精彩内容