Android 您可以在同一活动中使用数据绑定和视图绑定吗?

Android 您可以在同一活动中使用数据绑定和视图绑定吗?,android,android-databinding,android-viewbinding,Android,Android Databinding,Android Viewbinding,我想在同一活动中使用ViewBinding和DataBinding。如果这是可能的,您将如何在活动中实施它 这是我到目前为止试过的 @Override protected void onCreate(Bundle savedInstanceState) { ActivityMainBinding viewBinding = ActivityMainBinding.inflate(getLayoutInflater(); View view = viewBinding.getRoo

我想在同一活动中使用ViewBinding和DataBinding。如果这是可能的,您将如何在活动中实施它

这是我到目前为止试过的

@Override
protected void onCreate(Bundle savedInstanceState) {
    ActivityMainBinding viewBinding = ActivityMainBinding.inflate(getLayoutInflater();
    View view = viewBinding.getRoot();
    setContentView(view)

    ActivityMainBinding  dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

}

创建ViewBinding是因为有些人使用DataBinding只是为了在java/kotlin代码中获取绑定类并使用引用(而不是使用数据字段直接在xml中设置值)。数据绑定包括ViewBinding所拥有的一切,因此它不是为与视图绑定并行工作而设计的

最大的问题是生成的类之间的命名冲突。ViewBinding和DataBonding都希望为布局
main\u layout.xml
生成类
MainLayoutBinding

现在可能有一种使用自定义命名的方法,但这并不值得,原因如下:

最有可能的是,您希望两者都使用的唯一原因是,您不必将所有xml都打包到
中,并在默认情况下获得绑定,但这是一个非常小的工作量,因此不值得让这两个库同时工作

如果您想在xml中设置数据,只需使用数据绑定,并将其作为标准做法,使用
包装所有xml,这样您就可以始终通过绑定类引用视图

如果不想在xml中设置数据,只需使用视图绑定

但如果您真的想这样做,我认为您可以使用以下方法设置数据绑定名称:

<data class="DataBindingName">
    </data>

当您使用数据绑定时,它将同时提供视图绑定数据绑定功能,因此实现如下数据绑定

android {
  buildFeatures {
  dataBinding true
   }
 }

 <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
    name="viewmodel"
    type="com.myapp.data.ViewModel" />
</data>

</layout>


val dataBinding = DataBindingUtil.setContentView(this,R.layout.activity_main)
dataBinding.executePendingBindings()
dataBinding.tvName.text="Your Name"
android{
建筑特征{
数据绑定正确
}
}
val dataBinding=DataBindingUtil.setContentView(this,R.layout.activity_main)
dataBinding.executePendingBindings()
dataBinding.tvName.text=“您的姓名”

“我想在同一活动中使用ViewBinding和DataBinding”--为什么?数据绑定提供了视图绑定所做的一切。因此,如果您已经为项目启用了数据绑定,只需使用数据绑定。我看到了两者之间的区别,在数据绑定已经建立之后创建viewBinding似乎有点愚蠢。另一方面,我在stackOverFlow上看到了很多你的答案,我认为你对我的一个问题发表评论“在数据绑定已经建立之后创建viewBinding似乎有点傻”——这是一个构建性能的问题。数据绑定需要更长的时间来生成类。对于大型项目,这可能是一个问题。视图绑定类的生成成本相对较低,一些项目仅对生成的绑定类使用数据绑定(不用于绑定表达式、双向绑定等)。谢谢你的好话!