使用viewmodel传递值是空的

时间:2018-09-04 22:28:37

标签: android android-viewmodel

我有这个视图模型:

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);

然后我在NextActivity中对amunt值进行数据绑定,但是我得到的数据是空字符串。

1 个答案:

答案 0 :(得分:0)

ViewModel对象与传递到Lifecycle的{​​{1}}绑定。首次在片段中创建ViewModelProvider时:

ViewModel

它的范围仅限于该片段的生命周期。这意味着当您开始新活动并尝试在其中检索amountViewModel = ViewModelProviders.of(this).get(AmountViewModel.class); 时,将创建一个新活动,该活动将绑定到该活动的生命周期。

如果您想在屏幕之间共享ViewModel,则可能应该使用一个ViewModel,并在不同的Activity之间进行切换,而这些Fragments都可以使用同一ViewModel范围内的活动生命周期。我建议尝试使用Navigation Architecture Component来简化使用片段的导航。

否则,如果要坚持当前的实施并在活动之间保留数据,则应根据要存储的数据类型使用SharedPreferences,文件或其他选项。