如何将DataBindingUtil与Android微调器一起使用?

Ove*_*olt 7 java android

我正在尝试使用新的Android数据绑定库,并尝试使用所选值填充微调器时出现以下错误.

错误消息(在Android Studio中编译期间):

错误:任务':app:compileDebugJavaWithJavac'的执行失败.java.lang.RuntimeException:发现数据绑定错误.****/数据绑定错误****消息:无法找到参数类型为java.lang.String的属性'app:selection'的setter.file:/Users/ove/Code/AndroidStudio/Samples/Receipts/app/src/main/res/layout/dialogfragment_inputamount_db.xml loc:40:29 - 40:44****\data binding error****

我的布局文件看起来如下(不完整):

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

    <data>

        <variable
            name="receipt"
            type="com.example.model.Receipt" />
    </data>
    </LinearLayout>
    <Spinner
        android:layout_width="wrap_content"
        android:id="@+id/currency"
        android:layout_height="wrap_content"
        android:spinnerMode="dropdown"
        android:entries="@array/currency_array"
        app:selection="@{receipt.currency}" />
    </LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

那些设法获得数据绑定与旋转器一起工作的人?

奥维

小智 2

创建一个 BindingUtils 类并粘贴 setSelection 方法

public class BindingUtils
  {
       @BindingAdapter({"bind:selection"})
       public static void setSelection(Spinner spinner, int position)
       {
            spinner.setSelection(position);
       }
  }
Run Code Online (Sandbox Code Playgroud)

内部旋转器

app:selection="@{receipt.currencyIdx}"
Run Code Online (Sandbox Code Playgroud)

这就是你所要做的。

  • 这适用于单向绑定,双向绑定怎么样?在微调器中选择一个项目会更新模型。 (2认同)