首页 > 解决方案 > ViewModelProvider Fragment 实例化模型

问题描述

我有一个在我的“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有人可以告诉我如何从初始化类访问模型的现有实例吗?

标签: javaandroidandroid-fragmentsviewmodelandroid-viewmodel

解决方案


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

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

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

我希望你能明白。


推荐阅读