Как привязать список пользовательских объектов к спиннеру? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть макет с виджетом счетчика, который содержит мой счетчик с типами активности:

<?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"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <import type="android.view.View"/>
        <variable
            name="viewModel"
            type=".MainViewModel"/>
    </data>

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:showIn="@layout/app_bar_main"
        tools:context=".qwe.MaincActivity">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">


            <Spinner
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:entries="@{viewModel.activityTypes}"
                android:id="@+id/activity_types"/>

        </LinearLayout>
    </android.support.constraint.ConstraintLayout>
</layout>

И viewModel:

class MainViewModel
@Inject
constructor(
private var activityTypeRepository: ActivityTypeRepository,
) : ViewModel() {

private val compositeDisposable = CompositeDisposable()

val activityTypes = MutableLiveData<List<ActivityType>>()

fun loadActivityTypes() {
    compositeDisposable.addAll(activityTypeRepository.getAll()
        ?.subscribeOn(Schedulers.newThread())
        ?.observeOn(AndroidSchedulers.mainThread())
        ?.subscribeWith(
            object : DisposableObserver<List<ActivityType>>() {
                override fun onComplete() {
                }

                override fun onNext(t: List<ActivityType>) {
                    activityTypes.value = t
                }

                override fun onError(e: Throwable) {
                }

            }
        ))


}

override fun onCleared() {
    super.onCleared()
    if (!compositeDisposable.isDisposed) {
        compositeDisposable.dispose()
    }
}
}

Как связать spinner и ActivityTypes из viewModel Я хочу загрузитьвсе данные из ActivityTypes в Spinner и сохранять некоторую информацию в ViewModel при выборе какого-либо элемента в Spinner

Тип действия - сложный объект, который содержит несколько полей, и мне нужно отобразить одно из полей и выбрать весь объект из спискаActivityTypes Пожалуйста, объясните, как это можно сделать

class ActivityType(
    var id: String,
    var name: String,
    //other fields...
) : BaseObservable()
...