我有这个视图模型:
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值进行数据绑定,但是我得到的数据是空字符串。
答案 0 :(得分:0)
ViewModel
对象与传递到Lifecycle
的{{1}}绑定。首次在片段中创建ViewModelProvider
时:
ViewModel
它的范围仅限于该片段的生命周期。这意味着当您开始新活动并尝试在其中检索amountViewModel = ViewModelProviders.of(this).get(AmountViewModel.class);
时,将创建一个新活动,该活动将绑定到该活动的生命周期。
如果您想在屏幕之间共享ViewModel
,则可能应该使用一个ViewModel
,并在不同的Activity
之间进行切换,而这些Fragments
都可以使用同一ViewModel
范围内的活动生命周期。我建议尝试使用Navigation Architecture Component来简化使用片段的导航。
否则,如果要坚持当前的实施并在活动之间保留数据,则应根据要存储的数据类型使用SharedPreferences
,文件或其他选项。