Android是否可以使用视图变量显示/隐藏视图

时间:2017-04-18 21:59:57

标签: android xml data-binding view android-databinding

是否可以根据来自相同XML的值显示/隐藏视图?

我不想为java文件写很多条件。

我的意思是;如果we can do this

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

我们应该能够做到这一点吗?

 android:visibility="@{idOfMySwitch.isSelected() ? View.VISIBLE : View.GONE}"/>

如果是这样我该怎么办?

2 个答案:

答案 0 :(得分:0)

您应该检查视图模型的状态以确定是否显示该元素。

在ViewModel中:

@Bindable
public boolean isAdult() {
    return isAdult;
}

在您的活动中,您应该在交换机上有一个on click侦听器,相应地更新ViewModel上的isAdult,这将反过来更新textview的可见性。

您可以看到类似的示例here

答案 1 :(得分:0)

你不能这样做。 idOfMySwitch.isSelected()对于数据绑定本身是不可观察的。

对于这种情况,我有一个持有人,并将其指定为对开关的双向绑定和可见性的一种方式。

对于选择,您可能会遇到问题。双向绑定不是,或者至少不容易实现。但是使用开关你可能还是想要使用已检查的状态。

<Switch ...
    android:checked="@={holder.myState}" />
<TextView ...
    android:visibility="@{holder.myState ? View.VISIBLE : View.GONE}" />