Я работаю над концепцией привязки данных к комнате. Я устанавливаю список для счетчика с помощью настраиваемого адаптера привязки. Но я получаю нулевые данные при первом извлечении из комнаты.
код:
@Query("select * from Student")
LiveData<List<Student>> getAllItems();
@BindingAdapter({"bind:entries"})
public static void customSpinnerBinding(AppCompatSpinner appCompatSpinner,LiveData<List<Student>> listLiveData){
if(listLiveData != null && listLiveData.getValue().size() > 0){
ArrayAdapter<Student> spinnerArrayAdapter = new ArrayAdapter<Student>
(appCompatSpinner.getContext(), android.R.layout.simple_spinner_item,
listLiveData.getValue()); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout
.simple_spinner_dropdown_item);
appCompatSpinner.setAdapter(spinnerArrayAdapter);
}
}
public LiveData<List<Student>> getListLiveData() {
if(listLiveData == null){
listLiveData = studentDB.studentDao().getAllItems();
}
return listLiveData;
}
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/spinner"
android:layout_width="0dp"
bind:entries="@{viewmodel.listLiveData}"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
but if i observe livedata in activity this is working
mainViewModel.getListLiveData().observe(this, new Observer<List<Student>>() {
@Override
public void onChanged(@Nullable List<Student> students) {
if(students.size() > 0){
ArrayAdapter<Student> spinnerArrayAdapter = new ArrayAdapter<Student>
(MainActivity.this, android.R.layout.simple_spinner_item,
students); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout
.simple_spinner_dropdown_item);
activityMainBinding.appbar.contentid.spinner.setAdapter(spinnerArrayAdapter);
}
}
});