我想将TextView的文本有条件地设置为其中一个。
Android数据绑定文档建议您可以在文本是视图模型的属性时有条件地设置文本。 e.g。
android:text="@{user.displayName != null ? user.displayName : user.lastName}"
但是有没有办法从strings.xml中设置文本而不是在我的视图模型中添加它?我想要这样的东西 -
android:text="@{viewModel.expanded ? @string/collapse : @string/expand}"
XML看起来有点像这样:
<?xml version="1.0" encoding="UTF-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto">
<data class="TravellerInfoBinding">
<import type="android.view.View" />
<variable name="viewModel" type="com.myproject.viewmodel.TravellerInfoViewModel" />
</data>
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/expandable_arrow_blue" />
<TextView style="@style/primary_pair_element_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.expanded ? @string/taxes_fees_detail : @string/hide_taxes_fees_detail}"
android:textSize="12sp" />
</LinearLayout>
</layout>
这是我的视图模型 -
package com.myproject.viewmodel;
imports...
public class TravellerInfoViewModel extends BaseObservable {
@Bindable
private final TaxDetailsViewModel taxDetailsViewModel;
@Bindable
private boolean expanded;
Constructor....
public boolean isExpanded() {
return expanded;
}
public void setExpanded(boolean expanded) {
this.expanded = expanded;
notifyPropertyChanged(BR.expanded);
}
public void toggleExpanded() {
setExpanded(!expanded);
}
}
答案 0 :(得分:3)
实际上,这对我来说很好
<TextView
android:id="@+id/btnEdit"
style="@style/Common.Toolbar.Action.Text"
android:onClickListener="@{onEditClick}"
android:text="@{vm.editMode ? @string/contacts_done : @string/contacts_edit}"
tools:text="@string/contacts_edit"/>
其中vm
-这是一个ViewModel,而editMode
-这是ObservableBoolean
答案 1 :(得分:0)
这是一个修复/解决方法:
不是理想的解决方案,不是非常漂亮..但在功能上相当 - 并且在临时工作直到找到正确的解决方案。
以下是我为android:textStyle
解决的问题,其中我有一个特殊情况需要以粗体显示值。
<variable
name="viewModel"
type="com.demo.app.SomeViewModel"/>
...
<TextView
style="@style/RowValue"
android:visibility="@{ ! viewModel.boldRow ? View.VISIBLE : View.GONE}"
android:text="@{viewModel.currentValue}"
/>
<TextView
style="@style/RowValue"
android:visibility="@{ viewModel.boldRow ? View.VISIBLE : View.GONE}"
android:text="@{viewModel.currentValue}"
android:textStyle="bold"
/>