从findViewById到ViewBinding的演进

作者:袖梨 2026-06-02

Android开发中,传统findViewById方式存在诸多弊端,ViewBinding技术为视图绑定提供了更高效的解决方案。

findViewById → ViewBinding

老写法(Java)

public class MainActivity extends AppCompatActivity {    private TextView tvTitle;
    private Button btnSubmit;
    private RecyclerView rvList;    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);        tvTitle = findViewById(R.id.tv_title);
        btnSubmit = findViewById(R.id.btn_submit);
        rvList = findViewById(R.id.rv_list);        tvTitle.setText("Hello");
        btnSubmit.setOnClickListener(v -> {
            // do something
        });
    }
}

问题在哪里

findViewById存在三个主要缺陷:

findViewById → ViewBinding

  1. 每个View都需要单独声明和绑定,复杂页面会产生大量样板代码
  2. ID拼写错误不会在编译时发现,导致运行时崩溃
  3. 类型转换错误仅在运行时抛出ClassCastException

新写法(Kotlin + ViewBinding)

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 {
            // do something
        }
    }
}

在build.gradle中添加配置:

android {
    buildFeatures {
        viewBinding = true
    }
}

使用ViewBinding的优势:

  1. 自动生成视图绑定代码,无需手动编写
  2. 编译时检查ID正确性,避免运行时错误
  3. 类型安全,无需强制类型转换

一句话注意

ViewBinding自动将布局文件名转换为驼峰命名的绑定类,如activity_main.xml生成ActivityMainBinding。布局变更后绑定类会自动更新,无需手动维护。

在多模块项目中,每个模块都需要单独启用viewBinding功能。


本文介绍了从findViewById到ViewBinding的技术升级,显著提升了Android开发的效率和安全性。

相关文章

精彩推荐