Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据绑定-布尔条件未按应有的方式计算_Java_Android_Conditional Statements_Android Databinding - Fatal编程技术网

Java 数据绑定-布尔条件未按应有的方式计算

Java 数据绑定-布尔条件未按应有的方式计算,java,android,conditional-statements,android-databinding,Java,Android,Conditional Statements,Android Databinding,在我的xml中,我为控件设置了可见性条件,如下所示: android:visibility="@{event.isMessage?(event.dateEventText!=null? View.VISIBLE:View.GONE):View.VISIBLE}" 因此,如果event.isMessage为true,则应计算以下值:(event.dateEventText!=null?View.VISIBLE:View.GONE),否则应返回View.VISIBE 但是数据绑定抛出错误消息: *

在我的xml中,我为控件设置了可见性条件,如下所示:

android:visibility="@{event.isMessage?(event.dateEventText!=null? View.VISIBLE:View.GONE):View.VISIBLE}"
因此,如果
event.isMessage
为true,则应计算以下值:
(event.dateEventText!=null?View.VISIBLE:View.GONE)
,否则应返回
View.VISIBE

但是数据绑定抛出错误消息:

****/数据绑定错误****消息:找不到参数类型为boolean的属性“android:visibility”的setter android.widget.TextView

有人知道怎么回事吗?

试试这个

.
.
.
android:visibility="@{event.isMessage && event.dateEventText!=null ?  View.VISIBLE : View.GONE}"
.
.
.

我检查了这个方法,因为它看起来不错。它是有效的。不过,您可以检查模型的getter setter,查看XML中的类导入

下面的代码运行良好

事件类

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\u 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>
public class Event{
    // other variables
    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" />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="@{event.textVisibility}" />
4。使用处理程序方法设置可见性

activity.setHandler(new EventHandler(yourEventModel))
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="@{handler.textVisibility}" />
2。在布局中使用

    <variable
        name="handler"
        type="com.innovanathinklabs.sample.data.EventHandler" />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="@{event.textVisibility}" />

您可以使用布尔值到整数的转换适配器。如果它是静态的(与
BindingAdapter
相同),它将转换期望整数的布尔字段(例如
View.VISIBLE

@BindingConversion
int convertBooleanToVisibility(布尔值可见){
return isVisible?View.VISIBLE:View.GONE;
}
在XML中,您将使用返回布尔值的方法来显示:



Syntax error&&unescaped,我也不明白为什么第一种方法不起作用—您用标记覆盖了整个xml布局吗?这应该是预期的工作,我会尝试自己我也不知道为什么第一种方法不工作,见答案,我更新到&&;是的,我已经有了一些简单的条件,它们可以工作了。奇怪的是,我在第一种方法中没有发现错误。我还检查了kotlin插件是否被应用。检查这个答案。为什么我应该使用它而不是getter返回
int
?我猜benfit会自动转换所有事件吗?就像wpf绑定中的转换器一样是的,完全是。。好处是,您可以使用everywhere just boolean标志来显示/隐藏(可见/消失)视图。我尝试了您的代码,它在没有编译器错误的情况下工作,尝试清理项目,使cash无效,并重新启动AS。