MutableLiveData устанавливает значение, но getValue () возвращает ноль? - PullRequest
0 голосов
/ 25 февраля 2019

Я столкнулся с этой проблемой после переноса моего проекта на androidx.Все это работало как чудо до миграции (у меня было для переноса моего проекта) , но теперь я стою перед этой странной проблемой, которой раньше не было 10 минут.

Сценарий: Фрагмент 1 содержит список элементов и когда пользователь нажимает на элемент, я вызываю метод viewmodels setvalue(), а затем появляется фрагмент 2, чтобы показать, что пользователь щелкнул по элементу, и для этого я называю мои viewmodels getvalue(),Сценарий очень прост.

Фрагмент 1:

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        viewModel.getClickedSong().setValue(viewModel.getSongs().getValue().get(position));

Модель представления:

public MutableLiveData<Song> getClickedSong() {
    if (clickedSong == null) {
        clickedSong = new MutableLiveData<>();
    }
    return clickedSong;
}

Фрагмент 2:

viewModel.getClickedSong().observe(this, new Observer<Song>() {
                @Override
                public void onChanged(Song song) {
                    mySong = song;

Я также пытался: mySong = viewModel.getClickedSong().getValue(), но это также возвращает ноль.

1 Ответ

0 голосов
/ 25 февраля 2019

После нескольких часов исследований, тестирования и т. Д. Исправление было довольно простым.

Я изменил эту строку кода:

viewModel = ViewModelProviders.of(this).get(SharedViewModel.class);

На это:

viewModel = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
...