1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| 1.概念 使用 ViewModelProvider(requireActivity()) 让多个 Fragment 共享同一个 ViewModel
2.示例 2.1 创建 SharedViewModel public class SharedViewModel extends ViewModel { private MutableLiveData<String> message = new MutableLiveData<>();
public void setMessage(String msg) { message.setValue(msg); }
public LiveData<String> getMessage() { return message; } }
2.2 在多个 Fragment 共享 ViewModel public class FragmentA extends Fragment { private SharedViewModel viewModel;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { viewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
button.setOnClickListener(v -> viewModel.setMessage("Hello from Fragment A")); return inflater.inflate(R.layout.fragment_a, container, false); } }
public class FragmentB extends Fragment { private SharedViewModel viewModel;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { viewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
viewModel.getMessage().observe(getViewLifecycleOwner(), message -> { textView.setText(message); });
return inflater.inflate(R.layout.fragment_b, container, false); } }
|