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

时间:2016-10-11 13:31:52

标签: android xml 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>

JTApp类:

public class JTApp {

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

    …
}

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

2 个答案:

答案 0 :(得分:3)

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

  

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

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

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

<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>

答案 1 :(得分:-1)

使用资源修饰符可以更轻松地执行此操作:

  • 在layout-land中有一个不包含cardview的布局
  • 在布局中有另一个包含cardview的布局

所以你会得到这种效果,在风景中它甚至没有膨胀,然后设置不可见