java - 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
有人可以告诉我如何从初始化类访问模型的现有实例吗?
解决方案
mViewModel = new ViewModelProvider(requireActivity()).get(ModelName.class);
当你使用上面的代码时。请注意,片段检索包含它们的活动。这样,它不会实例化一个新对象,而是返回与附加到活动相同的对象。
您可以使用 Logcat 进行检查。只需mViewmodel.toString()
在活动和片段中使用。
我希望你能明白。
推荐阅读
- python - val, idx = min((val, idx) for (idx, val) in enumerate(my_list)) 是如何工作的?
- karate - 空手道 driver.url 不捕获窗口位置中的内容
- jquery - 如何使用 JQuery 创建相同数量的输入字段并从可用列表项中获取数据?
- python - 如何防止我的机器人获得角色
- angular - Angular mat-tab:仅加载初始选定选项卡的内容
- c# - 如何使用'LibGit2sharp'获取有关每个提交的git分支信息
- mongodb - 如何在 macbook 上运行 mongo 导出?
- c# - C# - Unity - 参数传递问题
- angular - npm 版本只是主要的(没有次要/补丁部分)
- javascript - 更改选择选项时如何获取对象值 - Angular9