多个Fragment之间可通过ViewModel进行通讯,ViewModel类让数据可在发生屏幕旋转等配置更改后继续留存。在对应的作用域内,保正只生产出对应的唯一实例,保证UI组件间的通信。
创建ViewModel类
public class SharedViewModel extends AndroidViewModel {
private final MutableLiveData<String> mData = new MutableLiveData<>();
public SharedViewModel(@NonNull Application application) {
super(application);
}
public void setData(String data) {
mData.setValue(data);
}
public LiveData<String> getData() {
return mData;
}
}
在 FragmentOne类中引入ViewModel,并更改数据状态
private SharedViewModel sharedViewModel;
// 在onCreateView中添加如下代码
sharedViewModel =
new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
// 模拟更改数据
sharedViewModel.setData(position);
在 FragmentOne类中引入ViewModel,并监听数据
private SharedViewModel sharedViewModel;
// 在onCreateView中添加如下代码
sharedViewModel =
new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
// 监听数据改变的操作
sharedViewModel.getData().observe(getViewLifecycleOwner(), data -> {
// 处理通信数据
Log.i(getTag(),"接受到数据:["+data+"]");
});