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 老项目迁移系列,持续更新中。

相关推荐
我是人✓20 分钟前
Spring IOC注解全解析和Spring整合测试单元
java·后端·spring
智购科技无人售货机工厂店27 分钟前
玻璃瓶饮料破损率突然上升,排查发现是取货口缓冲垫老化了~YH
java·开发语言·人工智能·python·eclipse
镜象科技35 分钟前
中小学AI心理健康解决方案服务商怎么选?2026年选型参考
android·java·人工智能
阿狗童鞋42 分钟前
高并发系统设计实战指南
java·spring boot·spring cloud
Sam_Deep_Thinking1 小时前
CountDownLatch实现原理
java·后端·面试·程序员
脚踏实地,坚持不懈!1 小时前
从 AOSP 源码角度分析 Android 定位性能问题
android
小狼Solar1 小时前
SAP MDG 功能范围说明(基于S/4HANA 2025)
java·开发语言
范中勤1 小时前
Python 与 Java:模块、包、对象、反射核心差异总结
java·python·面试·反射·元类
ab1237681 小时前
Spring Integration 完整笔记 + 和 spring-integration-mqtt、Paho、EMQX 的关系
java·笔记·spring
小蜗牛狂飙记1 小时前
java环境一键配置和切换的ui工具
java