Android中最佳实践@BindView代替繁琐的findViewById

2023-05-16

ButterKnife

ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,
有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWharton的力作,目前使用很广。
最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,
而是在编译的时候生成新的class。项目集成起来也是特别方便,使用起来也是特别简单。

使用方法:

1、在build.grade(Moudle)中添加如下依赖

	//butterknife
    implementation 'com.jakewharton:butterknife:10.0.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'

2、在Activity中使用

  @BindView(R.id.iv_back)
    ImageView img_back;
    @BindView(R.id.blog_content)
    TextView text_content;
    @BindView(R.id.blog_title)
    TextView text_title;
    @BindView(R.id.blog_createTime)
    TextView text_createTime;
    @BindView(R.id.blog_comment_num)
    TextView text_comments;
    @BindView(R.id.blof_prefers)
    TextView text_prefers;
    @BindView(R.id.blog_user_name)
    TextView text_username;

3、在onCreate()方法中注册(重要)

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_blog);
        ButterKnife.bind(this);//注意位置 否则报错
    }

4、在Adapter中使用

class LinearViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.tv_title)
        TextView tv_title;
        @BindView(R.id.tv_content)
        TextView tv_content;
        @BindView(R.id.blog_prefers)
        TextView tv_prefers;
        @BindView(R.id.blog_views)
        TextView tv_views;
        @BindView(R.id.blog_user_name)
        TextView tv_username;
        @BindView(R.id.line_index)
        LinearLayout linearLayout;
        @BindView(R.id.blog_avatar)
        ImageView imageView;
 
        public LinearViewHolder(@NonNull View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);//注意
        }
    }

5、在Fragment中使用

  @BindView(R.id.me_avatar)
    ImageView imageView;
    @BindView(R.id.me_username)
    TextView text_username;
    @BindView(R.id.me_description)
    TextView text_userDcrp;
 
    ApiService apiService;
 
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, 
    @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_user, container, false);
        ButterKnife.bind(this, view);//注意
        initData();
        return view;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android中最佳实践@BindView代替繁琐的findViewById 的相关文章

  • 如何从游标类中检索数据

    我需要知道如何从游标检索数据 我需要这个 因为铃声管理器以光标对象的形式返回所有音频文件 我需要知道如何检索这些值 Anbudan 获得 Cursor 对象后 您可以执行以下操作 if cursor moveToFirst do Strin
  • 在 Android Pie 上启动 context.startService(intent)

    我在 Activity 的 onResume 上启动了一项服务 它在 Oreo 上运行良好 但最近我看到 Android P 崩溃 显示 无法恢复 Activity 不允许启动服务意图 应用程序在后台 有没有人以前见过这个并且能够应用修复
  • 为什么我们(必须)使用不同的启动器图标(xhdpi、hdpi 等)

    我想知道 为什么我们在 android 中使用不同的启动器图标 大小 目前您 必须 将图标大小调整为 LDPI 36 x 36 MDPI 48 x 48 HDPI 72 x 72 XHDPI 96 x 96 并将它们放入所需的文件夹中 但是
  • MotionLayout:如何限制特定视图上的“OnSwipe”事件而不是整个屏幕上的“OnSwipe”事件

    我有一个带有以下 layoutDescription 场景文件 的运动布局
  • IntelliJ IDEA 中的 Android 开发导致电脑死机

    我使用 IntelliJ IDEA 10 5 进行 Android 开发 并使用最新的 Google USB 驱动程序 版本 4 进行调试 在 IntelliJ IDEA 中开发一段时间后 当通过 USB 连接 Android 设备 Nex
  • Fragment 内的 FragmentPagerAdapter

    我在实现基于多个 ViewPager 的设计时遇到了一些麻烦 在较高的层次上 我有一个 FragmentActivity 其中只有一个 FrameLayout 作为其内容 我有 3 个不同的片段想要显示 所有 3 个均为全屏 一次仅使用 1
  • 获取 ArrayIndexOutOfBoundsException 异常 [重复]

    这个问题在这里已经有答案了 这几天得到ArrayIndexOutOfBoundsException https docs oracle com javase 7 docs api java lang ArrayIndexOutOfBound
  • Android 防火墙与 VpnService

    我正在尝试使用 BS 项目的 VpnService 为 Android 实现一个简单的防火墙 我选择 VpnService 因为它将在非 root 设备上运行 它将记录连接并让您过滤连接 基于IP 有一个应用程序可以做到这一点 因此这是可能
  • 如何读取其他应用程序的SharedPreferences(相同用户ID)?

    在安卓4 3上测试 我有两个应用程序 com my app first and com my app second 在我的活动中 我想读取其他应用程序的首选项 我选择对我的两个应用程序使用相同的用户 ID android sharedUse
  • Android 如何使用 facebook 3.0 sdk 点赞帖子

    我想在我的 Android 应用程序中实现 喜欢 选项 但我不知道要使用哪个请求 我打开了一个有效的 Facebook 会话以及我想要点赞的 ID 帖子 我该如何实现这个功能呢 Thanks 我找到了解决方案 为了喜欢帖子 我使用 face
  • Android 上的自定义视图和窗口属性

    我想要做的是在我的应用程序顶部添加一个视图 该视图类似于过滤器视图 我想操纵屏幕的颜色 并且我还希望能够同时更改屏幕的亮度时间 这两件事似乎是分开起作用的 但不能一起起作用 这是我的代码 添加视图 colourView new Layer
  • Android 中的 FFMpeg jni?

    我已经构建了 Bambuser http bambuser com opensource 提供的 FFMPEG 可执行文件和库 所以我设法构建了 Android 可执行文件和库 如何在 Eclipse 项目中链接这些库并从 Java 调用
  • 如何在开头时解析 json 文件

    我想解析以下 JSON 文件 但以 向我表明这是一个数组 然后继续 对象 我当前的解析器返回一个 JSON 对象 我的问题是 如何修改解析器来解析这个文件 这样解析器将为我提供其他 JSON 文件 从对象或排列开始 JSON 文件 codi
  • 如何在Android中使用资源

    一个人如何使用资产 我有这个代码 AssetManager assets getAssets InputStream stream assets open test txt 看起来它只能在 Activity 类中使 用 如果我尝试在另一个类
  • gradle 复制为 doLast 不起作用

    我正在尝试做一件非常简单的事情 由于 gradle 在清理时会删除构建目录中的所有文件 因此我想在创建发布版本时将 apk 移至其他位置 所以我在链中添加了一个复制任务 并将其设置为最后一个 我尝试过的任何方法都不起作用 所以我简化了它并添
  • android形状xml旋转可绘制以编程方式改变颜色

    这是三角形的 xml
  • Flutter 图像选择器明确请求许可

    图像选择器包说 无需配置 该插件应该开箱即用 不再需要添加 android requestLegacyExternalStorage true 作为属性 AndroidManifest xml 中的标记 如 image picker 所示
  • Android minSdkVersion 与 Flutter(v2.8.1)

    我已经安装了 firebase 包 据我们所知minSdkVersion 19被推荐 所以 我想做这个过程 但是 我看到这一行包含在android app build gradle file minSdkVersion flutter mi
  • Android Studio gradle 构建时间太长

    My 安卓工作室项目过去构建速度更快 但现在需要很长时间才能构建 有什么想法可能导致延误吗 我努力了https stackoverflow com a 27171878 391401 https stackoverflow com a 27
  • 如何更改区域设置以使用拉丁塞尔维亚语(而不是西里尔塞尔维亚语)

    塞尔维亚语有拉丁字母和西里尔字母 在 Android 的日期和时间选择器小部件中 显示的塞尔维亚语言区域字母似乎是西里尔字母 如此处所示 我想更改区域设置 以便 Android 小部件使用拉丁塞尔维亚字母 当前的语言 国家代码 产生西里尔字

随机推荐

  • centos / redhat 版本防火墙配置之firewall-cmd配置

    检查服务器版本 cat etc redhat release 是centos 7 redhat 7 或以上版本的可以配置firewall 是centos 6 redhat 6 及一下版本的需要配置iptables 检查firewall状态是
  • 运行x程序出现:Can't open display 原因及其解决方法

    因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上 如果需要别的用户的图形显示在当前屏幕上 则应以当前登陆的用户 也就是切换身份前的用户执行如下命令 xhost 43 xhost 43 的作用 xhost 是用来控制
  • ORACLE数据库管理员的职责

    ORACLE数据库管理员的职责 一 xff0e 概述 ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控 xff1a 1 每天对ORACLE数据库的运行状态 xff0c 日志文件 xff0c 备份情况 xff0c 数据库
  • 实用webpack插件之ProvidePlugin

    现代化前端的全局引入是一个很有趣的东西 先来看下以下几个场景 xff1a 在webpack中 xff0c 我们可以在resolve的alias中定义一个层级较高的目录为一个自定义变量 例如resolve alias 64 path join
  • Conda&&Pip 使用

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 一 conda 配置环境 1 查看conda版本 2 升级conda版本 3 修改conda下载源渠道 4 conda删除追加的下载
  • IDEA2022.1创建maven项目,规避idea2022新建maven项目卡死,无反应问题

    idea 2022的新建项目和旧的不一样 选择maven archetype 输入 name xff08 项目名称 xff09 location xff08 项目文件路径 xff09 jdk 1 8 catalog xff1a 目录 xff
  • tightvnc绿色版,细数4款超好用的tightvnc绿色版

    在使用tightvnc软件时 xff0c 通常都希望能找到绿色版软件 xff0c 那大家知道有哪些tightvnc绿色版软件吗 xff1f 你所使用过的tightvnc绿色版软件又有哪些呢 xff1f 接下来让我们一起来看看那些超好用的ti
  • 修改 FTP 文件夹 权限 Linux

    cd 到根目录 1 例如FTP服务器根目录是aliRoot cd aliRoot 2 指定一个文件夹修改权限 xff1b 命令 xff1a chmod R 777 goodlist 现在 aliRoot goodlist 文件夹下就可以上传
  • Linux命令大全: mkdir命令 - 创建目录

    1 详解 mkdir命令是 make directories 的缩写 xff0c 用来创建目录 注意 xff1a 默认状态下 xff0c 如果要创建的目录已经存在 xff0c 则提示已存在 xff0c 而不会继续创建目录 所以在创建目录时
  • shell基础教程25: Shell字符串截取(最详细的教程,看完这篇可以弄懂整个原理)

    Shell 截取字符串通常有两种方式 xff1a 从指定位置开始截取和从指定字符 xff08 子字符串 xff09 开始截取 一 从指定位置开始截取 这种方式需要两个参数 xff1a 除了指定起始位置 xff0c 还需要截取长度 xff0c
  • Linux命令大全: nohup命令 – 后端运行程序

    nohup命令的全称为 no hang up xff0c 该命令可以将程序以忽略挂起信号的方式运行起来 xff0c 被运行的程序的输出信息将不会显示到终端 无论是否将 nohup 命令的输出重定向到终端 xff0c 输出都将附加到当前目录的
  • Linux命令大全: cat命令 – 在终端设备上显示文件内容

    1 详情 Linux系统中有很多个用于查看文件内容的命令 xff0c 每个命令又都有自己的特点 xff0c 比如这个cat命令就是用于查看内容较少的纯文本文件的 cat这个命令也很好记 xff0c 因为cat在英语中是 猫 的意思 xff0
  • Nginx安装报错:./configure: error: the HTTP gzip module requires the zlib library.

    错误信息 span class token punctuation span span class token operator span configure error the HTTP gzip module requires the
  • Nginx安装时:安装zlib1g-dev时提示“E: 无法定位软件包 zliblg-dev“的原因

    起因 安装zlig1g dev 依赖包时 xff1a sudo apt get install zliblg dev安装失败 发现 zlig1g dev中的第5个字母不是l xff0c 而是阿拉伯数字1 解决 输入sudo apt get
  • Nginx在Linux下常用的命令

    一 命令说明 选项说明 h帮助命令 v查看版本号 V查看版本号和配置选项 可用类查看已安装的所有模块 t测试配置文件是否正确 T测试nginx conf文件是否存在语法错误 q优雅停止nginx xff0c 有连接时会等连接请求完成再杀死w
  • ubuntu安装nginx与卸载

    一 安装nginx 1 前言 安装nginx 主要有2种方式 1 直接使用 sudo apt get install nginx 2 使用源码的形式安装 本次主要记录的是使用源码安装 2 下载nginx源码 a nginx官网下载地址 gt
  • ping不通Linux服务器怎么办?

    问题描述 xff1a ping是最常见的网络命令 xff0c 用来测试和远程机器是否连通的方法 我们常常会遇到一个问题 xff1a 无法ping一台远程主机 原因分析 xff1a ping不通远程机器 xff0c 最常见的原因有 xff1a
  • Nginx 学习 2: nginx进程模型

    一 概述 nginx有两类进程 xff0c 一类称为master进程 相当于管理进程 xff0c 另一类称为worker进程 xff08 实际工作进程 xff09 启动方式有两种 xff1a 单进程启动 xff1a 此时系统中仅有一个进程
  • nginx学习 3: Nginx 核心配置详解

    一 结构说明 说明 main 配置影响nginx全局的指令 一般有运行nginx服务器的用户组 xff0c nginx进程pid存放路径 xff0c 日志存放路径 xff0c 配置文件引入 xff0c 允许生成worker process数
  • Android中最佳实践@BindView代替繁琐的findViewById

    ButterKnife ButterKnife是一个专注于Android系统的View注入框架 以前总是要写很多findViewById来找到View对象 xff0c 有了ButterKnife可以很轻松的省去这些步骤 是大神JakeWha