您可以在同一个 activity 中使用 dataBinding 和 ViewBinding 吗?
Can you use dataBinding and ViewBinding in the same activity?
我想在同一个 activity 中使用 ViewBinding 和 DataBinding。如果这是可能的,你将如何在 activity?
中实现它?
这是我目前为止尝试过的方法,
@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 代码中获取绑定 class 并使用引用(而不是直接在 xml 中使用数据字段)。数据绑定包含 ViewBinding 的所有内容,因此它并非设计用于与 View 绑定一起工作。
最大的问题是生成的 classes 之间的命名冲突。 ViewBinding 和 DataBonding 都希望为布局 main_layout.xml
.
生成 class MainLayoutBinding
现在可能有使用自定义命名的解决方法,但这并不值得,原因如下:
很可能您想要两者的唯一原因是您不必将所有 xml 包装在 <layout>...</layout>
中并默认获得绑定,但就是这样让两个库并排工作并不值得付出一点努力。
如果你想在 xml 中设置数据,只需使用数据绑定,并将其作为标准做法将你所有的 xml 包裹在 <layout>
中,这样你就可以随时参考通过绑定 class.
到视图
如果您不想在 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"
是的,您可以在同一项目中使用 DataBinding 和 ViewBinding 技术。您可以先从其中一种技术开始,然后在需要时实施另一种技术。他们无缝地工作。如果你想要一个参考,你使用这个 GitHub link
我想在同一个 activity 中使用 ViewBinding 和 DataBinding。如果这是可能的,你将如何在 activity?
中实现它?这是我目前为止尝试过的方法,
@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 代码中获取绑定 class 并使用引用(而不是直接在 xml 中使用数据字段)。数据绑定包含 ViewBinding 的所有内容,因此它并非设计用于与 View 绑定一起工作。
最大的问题是生成的 classes 之间的命名冲突。 ViewBinding 和 DataBonding 都希望为布局 main_layout.xml
.
MainLayoutBinding
现在可能有使用自定义命名的解决方法,但这并不值得,原因如下:
很可能您想要两者的唯一原因是您不必将所有 xml 包装在 <layout>...</layout>
中并默认获得绑定,但就是这样让两个库并排工作并不值得付出一点努力。
如果你想在 xml 中设置数据,只需使用数据绑定,并将其作为标准做法将你所有的 xml 包裹在 <layout>
中,这样你就可以随时参考通过绑定 class.
如果您不想在 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"
是的,您可以在同一项目中使用 DataBinding 和 ViewBinding 技术。您可以先从其中一种技术开始,然后在需要时实施另一种技术。他们无缝地工作。如果你想要一个参考,你使用这个 GitHub link