1

我有一个布局适用于活动的通用基类。活动定义如下:

public abstract class MyActivity<TUserType extends UserType> extends AppCompatActivity

我希望能够对此类使用数据绑定,但是当我尝试在布局 xml 中使用此类的设置时,编译时无法识别该设置。这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:res="http://schemas.android.com/apk/res-auto">
    <data>
        <variable
            name="activity"
            type="com.exampl.MyActivity"/>
    </data>
    <LinearLayout android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <ProgressBar
            android:id="@+id/progressBar"
            android:layout_alignParentTop="true"
            android:visibility="@{activity.progressBarVisibility}"/>
    </LinearLayout>
</layout>

“progressBarVisibility”在 MyActivity 中定义,并且是公开的。我猜我可能必须定义 UserType,但我不知道如何做那个 xml 端。或者这还不支持?

4

1 回答 1

0

无需定义用户类型。这是我的情况:

公共抽象类 BaseStateVM 扩展 BasePVM {

@Bindable
public int getState() {
    return state;
}

<data>

    <import type="com.rayman.v2ex.widget.anotations.PageState" />

    <import type="com.rayman.v2ex.viewmodel.BaseStateVM" />

    <import type="android.view.View" />

    <variable
        name="viewModel"
        type="BaseStateVM" />
</data>

<LinearLayout android:id="@+id/loading_view"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/toolbar"
    android:gravity="center"
    android:orientation="vertical"
    android:visibility="@{viewModel.state==PageState.LOADING?View.VISIBLE:View.GONE,default=visible}">

    <ProgressBar
        android:id="@+id/progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

希望这会帮助你。完整的代码在这里

于 2016-03-30T05:45:38.943 回答