Android数据绑定:是否有显示/隐藏includes标签的好方法?

时间:2018-07-09 17:40:11

标签: android android-layout android-databinding

我刚刚开始弄乱android中的数据绑定。理想情况下,我希望有一个包含一些通用xml元素的xml根文件,然后它的内部内容可以是这样的三个xml文件之一

<data>
  <variable name="action" type="com.example.android.action"/>
</data>

<TextView>
<TextView>
<!--Only show one of these includes based on the binding data-->

<!-- if action.item -->
<include layout="item.xml"
 bind:item="@{action.item}">

<!-- else if action.udpate -->
<include layout="update.xml"
 bind:update="@{action.update}">

<!-- else if action.video -->
<include layout="video.xml"
 bind:video="@{action.video}">

<TextView>
... etc

因此,基本上基于动作内部存在的子对象(项目,更新或视频)显示其布局并绑定视图,但不显示其他包含对象。我应该只使用android的View:Visibility还是我忽略的包含项?

2 个答案:

答案 0 :(得分:3)

  

我应该只使用android的View:Visibility

吗?

是的,最好的方法是检查数据绑定布局中的select time, count(*) from rcc_logs group by STR_TO_DATE(time, '%d.%m.%Y') 并相应地设置可见性,如下所示。

boolean

您可以在此处如上所述检查<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" > <data> <import type="android.view.View"/> <variable name="action" type="com.example.android.action"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/item" android:visibility="@{action.item ? View.VISIBLE: View.GONE}"/> <include layout="@layout/update" android:visibility="@{action.someOtherObject!=null ? View.VISIBLE: View.GONE}"/> </LinearLayout> </layout> NULL

答案 1 :(得分:0)

请记住要为包含的布局提供id,否则将无法正常工作

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <import type="android.view.View"/>
        <variable
            name="show"
            type="Boolean" />
    </data>
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:background="@color/colorPrimary">


        <include layout="@layout/progress"
            android:id="@+id/progress"
            android:visibility="@{show?View.VISIBLE:View.GONE}"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>