Adnroid DataBinding и MutableLiveData

Ответить
Nixon3333
Сообщения: 1
Зарегистрирован: 17 окт 2019, 07:46

Adnroid DataBinding и MutableLiveData

Сообщение Nixon3333 » 17 окт 2019, 07:52

Я использую паттерн MVVM и DataBinding в своём проекте. Передать значения в Spinner мне удалось, но вот получить из оттуда - проблема. Гуглил, но ни один способ мне не помог. Вот как я делаю:
  • Установил атрибут android:selectedItemPosition="@={viewModel.position}" для Spinner
  • Создал

    Код: Выделить всё

    public static MutableLiveData<Integer> position = new MutableLiveData<>();

    поле во ViewModel
  • Создал геттер и сеттер для этого поля
  • Создал InverseBindingAdapter

Код: Выделить всё

@InverseBindingAdapter(attribute = "android:selectedItemPosition") 
public MutableLiveData<Integer> SelectedItem(Spinner spinner) { 
    position.setValue(spinner.getSelectedItemPosition());
    return position;
}
Данные обновляются (при перевороте устанавливаются предыдущие значения в Spinner), но не могу получить данные из LiveData: при дебаге видно, что данные с позицией поступают со Spinner, но position.getValue() возвращает null. Вот класс handler, где я пытаюсь получить данные:

Код: Выделить всё

public static class DetailToStockActivityHandler {

    Intent intent;

    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btSave:
                Toast.makeText(view.getContext(), getPosition().getValue(), Toast.LENGTH_LONG).show();
                break;
            case R.id.btCancel:
                view.getContext().startActivity(new Intent(view.getContext(), MenuActivity.class));
                break;
            default:
                break;
        }
    }
}
Подскажите, как сделать это правильно? Бьюсь уже второй день.

Ответить