【问题标题】:ViewModelProviders.of(getActivity()) "Cannot resolve method of(android.app.Activity)"ViewModelProviders.of(getActivity()) "无法解析 (android.app.Activity) 的方法"
【发布时间】:2018-08-18 23:50:24
【问题描述】:

我目前正在尝试借助视图模型Android ViewModels 在我的两个片段之间共享数据。

在本文中他们使用“ViewModelProviders.of(getActivity()).get(SharedViewModel.class);”在 Fragment 中获取模型。

我的问题是,当我将完全相同的行写入片段时,出现“无法解析 (android.app.Activity) 的方法”错误

model = ViewModelProviders.of(getActivity()).get(UserAccountViewModel.class);

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: android android-fragments viewmodel


    【解决方案1】:

    ViewModelProviders 要求您使用FragmentActivity(或从它派生的东西),而不是Activity,作为活动的基类。

    【讨论】:

    • 澄清一下 - 如果使用支持片段,它将起作用
    • 是的,如果getActivity() 正在返回一个android.app.Activity 实例,那么您使用的是本机片段。您需要使用片段的反向端口。部分原因是您可以使用ViewModelProviders。部分原因是原生 Fragment 在 Android P 中已被弃用。
    • 所以,这意味着我必须更改我的 Activity,它显示两个 Fragment 从“扩展 Activity”到“扩展 FramgmentActivity”?如果我理解正确的话。
    • @Tobias420d:是的,并更改您的片段以使用支持库版本 (android.support.v4.app.Fragment) 来匹配。这反过来将要求您使用getSupportFragmentManager() 而不是getFragmentManager()
    【解决方案2】:

    如果您在应用仍在使用 android.support.v4 时尝试在 gradle 文件中导入 androidx,您可能还会收到类似 Cannot resolve method 'of(android.support.v4.app.FragmentActivity)' from ViewModelProviders.of(getActivity()) 的错误

    这与所提出的问题不同,但在我遇到问题时在同一个球场并且在 Google 中排名第一,所以我发布它!

    【讨论】:

      【解决方案3】:

      只需将 getActivity() 转换为特定活动。这个对我有用。例如:

      model = ViewModelProviders.of((MainActivity)getActivity()).get(UserAccountViewModel.class);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-30
        • 2023-03-27
        • 1970-01-01
        • 2019-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多