在每个片段中拥有单独的ViewModel实例可以通过以下步骤实现:
示例代码如下:
public class MyFragment extends Fragment {
private MyViewModel mViewModel;
public static MyFragment newInstance() {
return new MyFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my, container, false);
// 获取ViewModelProvider对象
ViewModelProvider viewModelProvider = ViewModelProviders.of(this);
// 获取片段的ViewModel实例
mViewModel = viewModelProvider.get(MyViewModel.class);
// 在这里可以使用mViewModel进行数据操作
return view;
}
}
这样每个片段都会有一个独立的ViewModel实例,它们之间的数据不会相互影响。
如果需要在视图模型之间共享数据,可以使用以下方法:
示例代码如下:
public class SharedViewModel extends ViewModel {
private MutableLiveData<String> mData = new MutableLiveData<>();
public void setData(String data) {
mData.setValue(data);
}
public LiveData<String> getData() {
return mData;
}
}
public class FragmentA extends Fragment {
private SharedViewModel mViewModel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a, container, false);
// 获取ViewModelProvider对象
ViewModelProvider viewModelProvider = ViewModelProviders.of(getActivity());
// 获取共享数据的ViewModel实例
mViewModel = viewModelProvider.get(SharedViewModel.class);
// 在这里可以使用mViewModel进行数据操作
return view;
}
}
public class FragmentB extends Fragment {
private SharedViewModel mViewModel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_b, container, false);
// 获取ViewModelProvider对象
ViewModelProvider viewModelProvider = ViewModelProviders.of(getActivity());
// 获取共享数据的ViewModel实例
mViewModel = viewModelProvider.get(SharedViewModel.class);
// 在这里可以使用mViewModel进行数据操作
return view;
}
}
这样FragmentA和FragmentB就可以通过mViewModel共享数据了。在其中一个片段中更新数据,另一个片段也会收到更新的数据。
对于腾讯云相关产品和产品介绍链接地址,可以根据具体需求和场景选择适合的产品,例如云服务器、云数据库、云存储等。具体的产品介绍和链接地址可以在腾讯云官方网站上查找。
领取专属 10元无门槛券
手把手带您无忧上云