使用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中央仓库信息速查

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 基于kettle的数据采集平台

    基于kettle的数据采集平台平台开发目的是设计一个通用的数据采集、解析、处理、装载、调度、监控的通用数据采集平台。平台具有业务无关性,涉及到具体的业务数据处理时候需要特殊处理,动态加载到框架中,达到通用的目的。 

  • 分页的sql语句_自动分页

    分页的sql语句_自动分页下文将为您介绍三种SQL分页语句写法,如果您也遇到过类似的问题,不妨一看,相信对您会有所启迪。SQL分页操作是经常会遇到的,下面就将为您介绍三种SQL分页语句,供您参考,希望对您学习SQL分页能够有所帮助。方法一(适用于SQLServer2000/2005)SELECTTOP页大小* FROMtable1 WHEREidNOTIN

  • SSM整合案例(超详细)「建议收藏」

    SSM整合案例(超详细)「建议收藏」SSM整合案例(超详细)环境准备前提须知创建数据库和表结构创建Maven工程ssm导入坐标并建立依赖编写实体类编写持久层接口编写业务层接口编写业务层实现类编写Controller整合步骤保证Spring框架在web工程中独立运行第一步:编写spring配置文件并导入约束第二步:使用注解配置业务层第三步:导入log4j.properties配置文件第四步:测试spring能否独立运行保证SpringMVC在web工程中独立运行第一步:在web.xml中配置核心控制器(Dis

  • 微信小程序—-全局变量「建议收藏」

    微信小程序—-全局变量「建议收藏」方法二:用引入js的方法定义全局变量实例:我在公用文件夹src下的js文件夹中创建的三个保存全局变量的文件:base64.js、config.js、data.js这三个文件作用:示例代码:使用方法:方法三:使用全局状态管理库微信小程序—-全局状态管理(便于全局埋点等操作)微信小程序—-redux在原生微信小程序的使用实例我的博客,欢迎交流!我的CSDN博客,欢迎交流!微信小程序专栏前端笔记专栏微信小程序实现部分高德地图功能的DEMO下载微信小…

  • qlineedit自动补全_qlineedit只能输入数字

    qlineedit自动补全_qlineedit只能输入数字转载:http://www.cnblogs.com/csuftzzk/p/qss_lineedit_completer.html?utm_source=tuicool&utm_medium=referral显示密码显示密码时,利用lineedit-password-character属性更改密文显示字符内容。QLineEdit[echoMode=”2″]{lineedit…

    2022年10月30日

发表回复

您的电子邮箱地址不会被公开。

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