在我的xml中,我设置了控件的可见性条件,如下所示:
android:visibility="@{event.isMessage?(event.dateEventText!=null? View.VISIBLE:View.GONE):View.VISIBLE}"
因此,如果event.isMessage
为真,则应对(event.dateEventText!=null? View.VISIBLE:View.GONE)
进行赋值,否则,应返回View.VISIBE
。
但是数据绑定会引发错误消息:
**** /数据绑定错误**** msg:找不到参数类型为boolean的属性'android:visibility'的设置器 android.widget.TextView
有人知道怎么了吗?
答案 0 :(得分:1)
我检查了这种方法,因为它看起来还可以。而且有效。但是,您可以检查Model的getter setter,XML中的View类导入。
遵循代码的要求很好。
Event.class
public class Event {
boolean isMessage;
String dateEventText;
public boolean isMessage() {
return isMessage;
}
public void setMessage(boolean message) {
isMessage = message;
}
public String getDateEventText() {
return dateEventText;
}
public void setDateEventText(String dateEventText) {
this.dateEventText = dateEventText;
}
}
layout_text.xml
<?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="event"
type="com.innovanathinklabs.sample.data.Event" />
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{event.isMessage?(event.dateEventText!=null? View.VISIBLE:View.GONE):View.VISIBLE}" />
</layout>
在Handler中移动逻辑部分。
1。创建处理程序
EventHandler.class
public class EventHandler {
private Event event;
public EventHandler(Event event) {
this.event = event;
}
public int getTextVisibility() {
if (event.isMessage && event.dateEventText != null) return View.VISIBLE;
else return View.GONE;
}
}
2。在布局中导入处理程序
<variable
name="handler"
type="com.innovanathinklabs.sample.data.EventHandler" />
3。通过活动设置处理程序值
activity.setHandler(new EventHandler(yourEventModel))
4。使用处理程序方法设置可见性
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{handler.textVisibility}" />
仅此而已!
如果您不想添加新的Handler类。您也可以在模型类中放置可见性方法。
1。将getTextVisibility方法放入模型中
public class Event{
// other variables
public int getTextVisibility() {
if (event.isMessage && event.dateEventText != null) return View.VISIBLE;
else return View.GONE;
}
}
2。在布局中使用
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{event.textVisibility}" />
答案 1 :(得分:0)
尝试
.
.
.
android:visibility="@{event.isMessage && event.dateEventText!=null ? View.VISIBLE : View.GONE}"
.
.
.
答案 2 :(得分:0)
您可以将布尔型转换为int转换适配器。如果它是静态的(与BindingAdapter
相同),它将转换需要整数的布尔字段(例如View.VISIBLE
)。
@BindingConversion
int convertBooleanToVisibility(boolean isVisible) {
return isVisible ? View.VISIBLE : View.GONE;
}
在XML中,您将使用返回boolean值的方法:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{event.isMessageVisible()}" />