使用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java线程池参数分析「建议收藏」

    Java线程池参数分析「建议收藏」线程池组成创建线程池创建线程池通过Executors的工厂方法来创建线程池实例。实际上Executors创建的线程池实例最终都是通过实例化配置不同参数的ThreadPoolExecutor对象。 publicstaticExecutorServicenewFixedThreadPool(intnThreads){returnnewThreadPoolEx…

    2022年6月3日
    35
  • Nagios安装与部署[通俗易懂]

    Nagios安装与部署[通俗易懂]Nagios概述:Nagios是一款开源免费(也有收费版的NagiosXI)的监控工具,可以用以监控Windows、Linux、Unix、Router、Switch,可以监控指定主机的物理基础资源

    2022年7月2日
    24
  • Python从字符串中删除字符

    Python从字符串中删除字符Sometimeswewanttoremovealloccurrencesofacharacterfromastring.Therearetwocommonwaystoachievethis.有时我们想从字符串中删除所有出现的字符。有两种常见的方法可以实现此目的。Python从字符串中删除字符(PythonRemoveCharacterfr…

    2022年5月24日
    37
  • chrome-devtools_chromedev是什么软件

    chrome-devtools_chromedev是什么软件保存js和csssetting>workspace工作区设置后,自动映射工作区带绿色图标的文件,不需要请求blackboxscript黑盒调试,调试不进入第三方代码,只调试项目代码setting>blackbox或者鼠标右键设置networkthrottlingprofile设置网络模式,网速限制,在network中选择模式setting&gt…

    2022年10月6日
    2
  • springboot使用拦截器_通用mapper源码

    springboot使用拦截器_通用mapper源码1.加载依赖<dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version></dependency>2.引入逆向工程的插件引入

    2022年10月6日
    3
  • 整型转字符串c语言_java字符串数组转字符串

    整型转字符串c语言_java字符串数组转字符串整型转字符串实现(C语言)second6020180529#include&lt;stdio.h&gt;//n&lt;2的32次数,所以最大10位//n可能为负数,也可能为正数voidint2str(intn,char*str){charbuf[10]="";inti=0;intlen=0;//temp为n的绝…

    2022年10月19日
    1

发表回复

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

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