android 使用泛型的数据绑定 java

android data bindings using generics java

我是 android 数据绑定的新手,我想在数据绑定布局中使用泛型类型, 请问可以吗?

JAVA activity

public class SearchableActivity<R> extends ErpActivity<R extends MasterPojo>
{

  public  void callToBack(R r){
  } 
}

XML布局

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

<data>

    <variable
        name="task"
        type="R extends Masterpojo" />

    <variable
        name="activity"
        type="com.cloud9.erp.activities.SearchableActivity<R>" />


</data>

<TextView
    style="@style/valued_style"
    android:onClick="@{() -> activity.callToBack(task)}"
    android:text="Erp"
    android:textColor="@android:color/black"
    android:textSize="@dimen/fab_margin" />
</layout>

是的,可以为您的通用类型做一个 scape:

<data>
    <variable
        name="activity"
        type="com.cloud9.erp.activities.SearchableActivity&lt;R>" />
</data>

请记住,Android Studio 仍会显示 "Cannot resolve symbol" 错误,但您的布局文件会编译。

此外,这不是最好的实现方式,您应该使用 Handlers 进行此类操作:

public class MyHandlers {
    public void onClickFriend(View view) { ... }
}

然后,在您的 XML:

中使用它
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="handlers" type="com.example.Handlers"/>
       <variable name="user" type="com.example.User"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{user.firstName}"
           android:onClick="@{handlers::onClickFriend}"/>
   </LinearLayout>
</layout>