面对数据绑定中的一些问题(错误:表达式的非法开头?resourceData = null;)

问题描述 投票:0回答:1

我的XML代码在下面

    <data>

        <import type="android.view.View"/>
        <import type="com.example.data.api.Status" />

        <variable
            name="resource"
            type="com.example.data.api.Resource" />
    </data>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center"
        android:padding="@dimen/dp8"
        android:visibility="@{resource.data == null ? View.GONE : View.VISIBLE}" //This line throwing error
        >

        <ProgressBar
            android:visibility="@{resource.status == Status.LOADING ? View.GONE : View.VISIBLE}"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/progress_bar"
            android:layout_margin="8dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/error_msg"
            android:text="@{resource.message ?? @string/unknown_error}"
            android:visibility="@{resource.status == Status.ERROR ? View.GONE : View.VISIBLE}"/>

    </LinearLayout>
</layout>

使用此代码,我得到以下错误

error: illegal start of expression            ? resourceData = null;

如果我删除以下行,则一切正常。

android:visibility="@{resource.data == null ? View.GONE : View.VISIBLE}"

资源类正在处理带有通用类型参数的API数据,并且可以随时为null。资源类如下:

data class Resource<out T>(val status: Status, val data: T?, val message: String?) {
    companion object {
        fun <T> success(data: T?): Resource<T> {
            return Resource(Status.SUCCESS, data, null)
        }

        fun <T> error(msg: String, data: T?): Resource<T> {
            return Resource(Status.ERROR, data, msg)
        }

        fun <T> loading(data: T?): Resource<T> {
            return Resource(Status.LOADING, data, null)
        }
    }
}

[请帮助我说明为什么此行引发错误。有什么问题吗?

android android-layout data-binding android-databinding
1个回答
0
投票

因为您的Resource类是通用类型,并且您尝试使用通用属性,所以必须在XML中设置该类型,否则它将显示illegal start of expression

<data>
    <import type="android.view.View"/>
    <variable
        name="resource"
        type="com.example.data.api.Resource&lt;String>" />
</data>

这里我已将String用作通用类型:Resource<String>

© www.soinside.com 2019 - 2024. All rights reserved.