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

UserType を定義する必要はありません。これは私の場合です:

パブリック抽象クラス 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 に答える