ButterKnife → ViewBinding

ButterKnife → ViewBinding

老写法(Java + ButterKnife)

java 复制代码
public class MainActivity extends AppCompatActivity {

    @BindView(R.id.tv_title) TextView tvTitle;
    @BindView(R.id.btn_submit) Button btnSubmit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        tvTitle.setText("Hello");
    }

    @OnClick(R.id.btn_submit)
    public void onSubmit() {
        // 处理点击
    }
}

问题在哪里

ButterKnife 已停止维护,作者 Jake Wharton 自己也不建议继续使用。依赖注解处理器,每次 build 生成大量中间代码,编译速度慢。不支持 Kotlin(虽然有 kotlin-annotation-processing,但体验很差)。

新写法(ViewBinding)

kotlin 复制代码
class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.tvTitle.text = "Hello"
        binding.btnSubmit.setOnClickListener { onSubmit() }
    }
}

一句话注意

迁移重点:@BindView 声明全删掉,用 binding.tvTitle 直接访问。@OnClick 的方法体搬到 setOnClickListener lambda 里。不需要注解处理器,编译速度明显变快。

ButterKnife 的 @BindViews(多个 ID 绑定到 List)在 ViewBinding 里没有直接等价物,用单个 binding 引用解决。@BindColor / @BindDimen 之类的资源绑定用 context.resources.getColor() 等标准 API 替代。


Java Android 老项目迁移系列,持续更新中。

相关推荐
AC赳赳老秦1 小时前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例
java·大数据·python·数据挖掘·数据分析·php·openclaw
笑小枫1 小时前
用 Claude Code 推翻重写笑小枫网站
java·人工智能·spring boot·ai编程
霸道流氓气质1 小时前
ApiPost 中配置自动获取 Token 并调用业务接口完整指南
java·服务器·数据库
通玄1 小时前
Jetpack Compose 入门系列(十):Paging 3 分页加载
android
hunterandroid1 小时前
DataStore 工程化实践:迁移、并发更新与异常恢复
android·前端
独隅2 小时前
IntelliJ IDEA 接入多种AI大模型插件终极指南(2026.1 企业合规版)
java·人工智能·intellij-idea
还是奇怪2 小时前
Simon Willison 用 DSPy 优化 Datasette Agent 提示词:提示工程正在变成可测试的软件工程
java·开发语言·软件工程
zfoo-framework2 小时前
1.ansible安装 2.虚拟机克隆
java
码上解惑2 小时前
从 Dify 工作流说起:常用节点怎么选、怎样组合?
java·人工智能·ai·agent·dify·智能体·spring ai
青山木3 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先