是否可以根据类方法响应有条件地显示 XML 包含?

Mar*_*nas 3 xml android android-databinding

我想知道是否可以使用 DataBinding 根据方法布尔响应有条件地显示布局。这就是我想要做的

XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable
            name="View"
            type="android.view.View"/>

        <variable
            name="App"
            type="com.app.JTApp"/>
    </data>

    <include layout="@layout/view_checkout_total_cardview"
             android:visibility="@{App.isLandscape() ? View.GONE : View.VISIBLE}" />

</layout>
Run Code Online (Sandbox Code Playgroud)

JTApp 类:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable
            name="View"
            type="android.view.View"/>

        <variable
            name="App"
            type="com.app.JTApp"/>
    </data>

    <include layout="@layout/view_checkout_total_cardview"
             android:visibility="@{App.isLandscape() ? View.GONE : View.VISIBLE}" />

</layout>
Run Code Online (Sandbox Code Playgroud)

目前这不起作用。我错过了什么或者这是不可能的吗?我来自网络,使用 Angular 等框架可以做到这一点。

Bry*_*yan 5

是的,可以在 XML 中使用条件语句。我对数据绑定库不太熟悉,但文档中使用了类似的功能:

数据元素内可以使用零个或多个导入元素。这些允许轻松引用布局文件中的类,就像在 Java 中一样。

<data>
    <import type="android.view.View"/>
</data>
Run Code Online (Sandbox Code Playgroud)

现在,可以在绑定表达式中使用 View:

<TextView
   android:text="@{user.lastName}"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>
Run Code Online (Sandbox Code Playgroud)

我相信您的代码的唯一问题是您在元素中使用Viewas avariable而不是 as an 。import<data>