Как привязать пользовательский объект к макету spinner с помощью библиотеки привязки данных?


Я хочу привязать свой объект к макету строки spinner с помощью библиотеки привязки данных android. Post 1 иPost 2 не объяснили, как я могу использовать привязку данных и как связать несколько полей (а не только одну строку) объекта данных.

Мой объект данных выглядит следующим образом:

class Data{
    public final String imageUri;
    public final String title;
    public final int totalCount;
}

Планировка I wish выглядит так:

<!-- horisontal orientation -->
<LinearLayout>
    <!-- Icon -->
    <ImageView/>

    <!-- Title -->
    <TextView/>

    <!-- TotalCount -->
    <TextView/>
</LinearLayout>

И как это связано, я не знаю...

1 2

1 ответ:

Чтобы использовать привязку данных, необходимо обернуть весь макет в тег layout.Таким образом, Вы можете назначить модель для вашего представления, так что это должно быть вашим макетом.

<layout>
   <data>
     <variable name="data" type="your.packagename.Data">
     </variable> 
   </data>
   <!-- horisontal orientation -->
   <LinearLayout>
     <!-- Icon -->
     <ImageView
       android:src="@{data.imageUri}"/>

     <!-- Title -->
     <TextView
       android:text="@{data.title}"/>

     <!-- TotalCount -->
     <TextView
       android:text="@{data.totalCount}"/>

  </LinearLayout>
</layout>

Предположим, что ваш используется, чтобы показать Spinner и Ваше имя макета custom_spinner.xml . Тогда вот как вы устанавливаете данные в макет. После установки адаптера Spinner, вот что вам нужно сделать

Data data; // Data object
CustomSpinnerBinding binding = DataBindingUtil.inflate(R.layout.custom_spinner);
binding.setData(data);

Это должен быть ваш пользовательский адаптер

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    CustomSpinnerBinding binding = DataBindingUtil.inflate(R.layout.custom_spinner);
    binding.setData(dataList.get(position)); // you should pass dataList as an argument in Custom Adapter constructor
}