是时候忘记 findViewById 了

在 Android 开发中 findViewById 相信是大家写得最多的方法之一。一个稍微复杂点的界面就需要写一大段的 findViewById,相当的浪费时间。之前已经有了很多的工具来帮助我们,但是现在我们终于迎来了官方支持的方法了。

首先,在你应用的 build.gradle 中添加:

android {
  ...
  dataBinding.enabled = ture
}

之后,在你的界面文件中,用 把已有的布局包裹起来。就像下面这样:


     
     
   
        
    

然后就可以在 Activity 中用下面的方式来绑定数据了:

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.tvHello.setText("Hello World");

其中的 ActivityMainBinding,是根据具体的 layout 文件名来决定的。之后就能够使用 binding 和对应组件的 id 来进行一系列的操作啦。在这里需要注意资源文件和代码中名称的对应关系,可以看到 TextView 的 id 为 tv_hello,代码中就相应变为 tvHello;布局文件的名称为 activity_main,对应 Binding 的名称就为 ActivityMainBinding。

当使用 RecyclerView,ViewPager 等不是调用 setContentView 的控件时,可以用下面的方法:

ActivityMainBinding binding = DataBindingUtil.inflate(
  getLayoutInflater(), container, attchToContainer);

当需要将渲染的视图添加到其他 ViewGroup 中时,可以用 getRoot() 来得到根视图:

linearLayout.addView(binding.getRoot());

是不是感觉很方便?但更好的是这并没有用到反射或任何相对复杂的技术,在不影响性能的情况下,可以告别那麻烦又冗长的 findViewById 了。

当然 Android Data Binding 还有很多进阶用法,大家可以参考这里:
https://developer.android.com/topic/libraries/data-binding/index.html

后续,我也会继续写这方面的内容,在这里就权当抛砖迎玉吧。: )

你可能感兴趣的:(是时候忘记 findViewById 了)