具有多种布局的 Android 数据绑定(bind)

标签 android data-binding android-databinding

我对 android 数据绑定(bind)有疑问。我有不同配置的布局,例如:activity_main.xml/land/activity_main.xml 等。 目前,当我使用 setContentView 方法时,只需传递布局名称,它会自动检测应该选择哪个布局来设置内容 View 。

但是如果我使用数据绑定(bind),那么解决方案是什么。 据我所知,绑定(bind)的名称会因配置而异。因此,如果我使用 ActivityMainBinding,那将始终是同一布局的数据绑定(bind)。我阅读了有关指定标记(每个配置的 bool 值)并使用 if/else 语句然后膨胀所需绑定(bind)的解决方案,但这是非常糟糕的解决方案。

对于 Activity/fragment 针对不同配置布局/端口/sw600-port/land 等使用不同布局的情况,任何人都可以提出更好的解决方案

谢谢!

最佳答案

你可以用同样的方式使用它:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityMainBinding binding = DataBindingUtil.setContentView(this,
        R.layout.activity_main);
    // set all variables in binding
}

生成的 ActivityMainBinding 类将是所有匹配布局绑定(bind)的基类,并将包含所有变量/字段的集合。如果 View 仅在某些布局中,则某些字段引用在某些配置中将为空,因此您必须注意这一点。如果您主要使用数据绑定(bind)表达式来设置值或附加事件处理程序,您甚至不需要使用 View 字段引用,因此您不必为此担心。

如果 View 在不同的布局中具有不同的类型,则公共(public)基类将用于 View 字段。

您始终可以通过查看构建文件夹来查看生成的代码。您可能会发现它的实现方式很有趣。

关于具有多种布局的 Android 数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42536636/

相关文章:

php - 有没有办法从 php 构建 android 源代码?

android - 如何在一个数据库中创建两个表

c# - 无法将 distinct 绑定(bind)到下拉控件

java - Kotlin 和数据绑定(bind) Int 值 null 检查问题

java - 创建一个应用程序,我可以用手指实际写出东西

Android 使用自定义 View 多次 inflatedView

c# - amCharts:帮助 WPF MVVM 数据绑定(bind)?

java - Android 数据绑定(bind)将参数传递给 onClick 方法

android - 选择器不响应点击事件

android - Android MVVM + 数据绑定(bind) + 架构组件示例(ViewModel 和 Room)