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

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

1.Gradle 配置

implementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'

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

Java8才支持静态接口方法的原因,可以通过在app的build.gradle文件中配置使用Java8的编译

compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
}

2.绑定

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

3.报错,备注解的属性和方法不能为私有的和静态的

@BindView(R.id.ivBookCover)
    ImageView mIvBookCover;
    @BindView(R.id.tvBookListTitle)
    TextView mTvBookTitle;

4.解绑

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

5.特别注意

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

 

Maven中央仓库信息速查

书到用时方恨少,纸上得来终觉浅。共勉。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114991.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jetbrains rider 激活码【2021免费激活】

    (jetbrains rider 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1STL…

    2022年3月27日
    960
  • MapReduce编程模型[通俗易懂]

    MapReduce编程模型[通俗易懂]1.MapReduce简介MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。一个完整的mapreduce程序在分布式运行时有三类实例进程:MRAppMaster负责整个程序的过程调度及状态协调MapTask负责map阶段的整个数据处理流程ReduceTask负责reduce阶段的整个数据处理流程2.MapReduce核心编程思想1)分布式的运算程序往往需要分成至少2个阶段。2

    2022年6月26日
    31
  • nport串口服务器配置网址(串口服务器是不是网口转串口)

    NPort串口服务器有分“驱动模式”及“socket模式”如果您的程序是通过串口进行通讯,那么请选择NPort的“驱动模式”,也就是为主机添加虚拟串口,具体安装配置是(这里以windows为例):1、通过NPortSearchUtility找到网络上的NPort,请将主机IP与NPortIP在同一网段中,NPort默认IP:192.168.127.2542、选择相对应的NPort双击;3…

    2022年4月11日
    50
  • Base64编码与图片互转工具[通俗易懂]

    Base64编码与图片互转工具[通俗易懂]packagecom.willdas.test;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importja

    2022年6月6日
    37
  • vagrant配置端口转发

    vagrant配置端口转发

    2022年2月11日
    38
  • Filter及FilterChain的使用具体解释

    Filter及FilterChain的使用具体解释

    2021年12月9日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号