备用布局的 Android 数据绑定将不同的根布局声明为 View



我是第一次使用数据绑定。一切都按预期工作,直到我决定为横向模式创建单独的布局。现在,我有两个主要活动的布局,分别用于纵向和横向模式:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:id="@+id/main_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <!--Some Views-->
    </LinearLayout>
</layout>

activity_main.xml(土地(:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <android.support.constraint.ConstraintLayout
        android:id="@+id/main_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--Some Views-->
    </android.support.constraint.ConstraintLayout>
</layout>

问题是我无法使用binding.mainLayout作为ViewGroup,因为它在ActivityMainBinding.java中声明为视图:

public final android.view.View mainLayout;

难道不应该宣布为ViewGroup,看到LinearLayoutConstraintLayout都直接扩展ViewGroup吗?我做错了什么吗?这背后是否有合乎逻辑的原因,或者只是疏忽?

ActivityMaindBinding 一起,您应该获得自动生成的默认和土地布局实现。它们应该分别称为ActivityMainBindingImpl和ActivityMainBindingLandImpl

在运行时中,您可以使用 instanceof 运算符检查哪个实现正在使用中,并使用正确的类型访问 mainLayout。

最新更新