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

相关推荐
又见情义几秒前
RK3568 + RTL8211F 网络唤醒(WOL)功能适配全记录
android·网络·驱动开发
孙克旭_13 分钟前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表
用户09340777351414 分钟前
HarmonyOS WPS Open SDK 实践:registerApp 鉴权与就绪门禁
android·typescript·harmonyos
2601_9619017018 分钟前
SpringCloud2023集成Nacos2.4.3
java
jike_202620 分钟前
会议离线录音APP:无网络记录能力对比
android·智能手机·语音识别
玄昌盛不会编程20 分钟前
LeetCode——2091. 从数组中移除最大值和最小值
java·算法·leetcode
Rain的Java大神之路23 分钟前
如何保证接口幂等
java·经验分享·后端·面试·架构
吴声子夜歌24 分钟前
Java——数组和集合(一)
java·开发语言
Jesse_EC26 分钟前
一个看不见的字符——CRLF 如何让我的 Docker 初始化脚本"静默失踪"
java·后端
深念Y26 分钟前
Nuxt 项目 Docker 构建:从 pnpm+node 迁移到全 bun
java·前端·docker