gpt4 book ai didi

java - ViewModelProvider Fragment实例化模型

转载 作者:行者123 更新时间:2023-12-01 17:19:47 27 4
gpt4 key购买 nike

我有一个在我的“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);
}
...

到目前为止,我在每个 fragment 中都使用了这种近似来实例化相同的模型,并能够与其中的变量进行交互:

//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 初始化类访问模型的现有实例吗?

最佳答案

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

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

您可以使用Logcat进行检查。只需在 Activity 和 Fragment 中使用 mViewmodel.toString() 即可。

希望你能明白。

关于java - ViewModelProvider Fragment实例化模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61318706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com