ViewModelProvider Fragment 实例化模型

ViewModelProvider Fragment instantiate model

我有一个在我的 "MainActivity.java" 上启动的模型,其名称如下:

//MainActivity.java (public class MainActivity extends AppCompatActivity {...)
...
private ModelName mViewModel;
...
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mViewModel = new ViewModelProvider(this).get(ModelName.class);
}
...

截至目前,我在我的每个片段中使用这个近似来实例化相同的模型并能够与其中的变量交互:

//FragmentClass.java (public class F1_Start_Acquisition extends Fragment {...)
...
private ModelName mViewModel;
...
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.f1__test__fragment, container, false);
        mViewModel = ViewModelProviders.of((FragmentActivity) 
              getActivity()).get(ModelName .class);
}

ViewModelProviders.of 被弃用了,我到处都看到它应该被替换为 new ViewModelProvider(this).get(ModelName.class);,但我不想创建模型的新实例,我只想得到现有实例已经创建,我尝试了很多方法都不起作用...

有人可以告诉我如何从 Fragment.java 初始化 class 访问模型的现有实例吗?

mViewModel = new ViewModelProvider(requireActivity()).get(ModelName.class);

当你使用上面的代码时。请注意,该片段检索包含它们的 activity。这样,它不会实例化一个新对象,而是 return 与附加到 activity 相同。

您可以使用Logcat进行检查。只需在 activity 和片段中使用 mViewmodel.toString()

希望你能明白。