我对 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/