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

时间:2017-03-01 16:10:35

标签: android data-binding android-databinding

我遇到了android数据绑定问题。我有不同配置的布局,例如:activity_main.xml / land / activity_main.xml等。 目前,当我使用setContentView方法时,只需传递布局名称,它会自动检测哪些布局应该选择设置内容视图。

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

对于不同配置布局/端口/ sw600-port / land等的活动/片段使用不同布局的情况,任何人都可以建议更好的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:4)

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

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

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

如果视图在不同的布局中具有不同的类型,则公共基类将用于“视图”字段。

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