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

标签 android xml android-databinding

我想知道是否可以使用 DataBinding 有条件地显示基于方法 bool 响应的布局。这就是我正在尝试做的事情

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>

JTApp 类:

public class JTApp {

    public boolean isLandscape() {
        Timber.d("putty-- isLandscape: --------------------------");
        return getResources().getBoolean(R.bool.is_landscape);
    }

    …
}

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

最佳答案

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

Zero or more import elements may be used inside the data element. These allow easy reference to classes inside your layout file, just like in Java.

<data>
    <import type="android.view.View"/>
</data>

Now, View may be used within your binding expression:

<TextView
   android:text="@{user.lastName}"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>

我相信您的代码的唯一问题是您正在使用 View作为variable而不是 import在你的<data>元素。

关于android - 是否可以根据类方法响应有条件地显示 XML 包含内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39978450/

相关文章:

java - 为什么在 Android 中使用 XML 来创建 UI 布局?

java - 无法在 Android Studio 中导入数据绑定(bind)类

android - 在 facebook 页面上分享会引发错误

c++ - QT读取XML文件,结构

c - Unix XML 文件转换为平面文件

java - 用于解析 RSS/Atom 的 ROME API

android - 在数据绑定(bind)上调用 setLifecycleOwner 时,我应该传递从 getViewLifecycleOwner 返回的 Fragment 实例还是所有者

android - 为什么使用 ViewBinding 而不是 DataBinding?

android - 更新 android studio 4.0 后无法解析 MultiDexApplication

android - 从 Dropbox 下载所有类型的文件