передаваемое значение с использованием viewmodel пусто - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть эта модель:

public class AmountViewModel extends ViewModel {
    private MutableLiveData<String> amount = new MutableLiveData<String>();

    public void setAmount(long value) {
        amount.postValue(Long.toString(value));
    }

    public LiveData<String> getAmount() {
        return amount;
    }
}

Я использую его для передачи суммы из фрагмента в действие:

AFragment:

amountViewModel = ViewModelProviders.of(this).get(AmountViewModel.class);
amountViewModel.setAmount(1000);
Intent intent = new Intent(getActivity(), NextActivity.class);
getActivity().startActivity(intent);

Затем я привязал значение amunt в NextActivity, но данные, которые я получил, были пустой строкой.

1 Ответ

0 голосов
/ 05 сентября 2018

ViewModel объекты привязаны к Lifecycle, переданному ViewModelProvider. При первом создании ViewModel во фрагменте:

amountViewModel = ViewModelProviders.of(this).get(AmountViewModel.class);

он становится ограниченным жизненным циклом этого фрагмента. Это означает, что когда вы начинаете новое действие и пытаетесь найти там ViewModel, будет создано новое, которое будет связано с жизненным циклом действия.

Если вы хотите разделить ViewModel между экранами, вам, вероятно, следует использовать один Activity и переключаться между различными Fragments, которые могут использовать один и тот же ViewModel в жизненном цикле этого действия. Я предлагаю попробовать Компонент архитектуры навигации , который упрощает навигацию с использованием фрагментов.

В противном случае, если вы хотите придерживаться текущей реализации и сохранять данные между действиями, вам следует использовать такие параметры, как SharedPreferences, файлы или другие, в зависимости от типа данных, которые вы хотите сохранить.

...