【问题标题】:error: no suitable method found for method ViewModelProviders.of(Fragment,Factory)错误:没有为方法 ViewModelProviders.of(Fragment,Factory) 找到合适的方法
【发布时间】:2018-11-21 14:37:32
【问题描述】:

尝试通过ViewModelProviers.of() 向我的活动提供ViewModel

我的活动扩展了AppCompatActivity,但我仍然看到此错误:

错误:找不到合适的方法 of(StartActivity,StartViewModelFactory) 方法 ViewModelProviders.of(Fragment,Factory) 不适用(参数 不匹配; StartActivity 不能转换为 Fragment) 方法 ViewModelProviders.of(FragmentActivity,Factory) 不适用 (参数不匹配;StartActivity 无法转换为 片段活动)

Dagger 2 提供了依赖注入。下面是我的 Activity 类 StartActivity:

public class StartActivity extends AppCompatActivity {

    @Inject
    StartViewModelFactory startViewModelFactory;
    StartModelView startModelView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        AndroidInjection.inject(this);
        super.onCreate(savedInstanceState);
        startModelView = ViewModelProviders.of(this, startViewModelFactory).
                get(StartViewModel.class);

}

如果我理解正确,如果它们扩展 AppCompatActivity 或 Fragment,您应该能够在 ViewModelProviders.of() 方法中发送活动。但我得到这个错误。任何帮助将不胜感激。

【问题讨论】:

    标签: android mvvm viewmodel dagger-2


    【解决方案1】:

    你应该使用

       .get(StartModelView.class);
    

    而不是

     .get(StartViewModelFactory.class);
    

    android 使用提供给of() 的工厂来生成ViewModel 子类的实例

    【讨论】:

    • 谢谢,确实如此。我在我的代码和这个问题中添加了它。但问题仍然存在。它还能坚持什么?会不会和依赖注入有关?
    • 看来你是对的。我的模型视图工厂还有另一个潜在问题。我从@NonNull @Override public <T extends ViewModel> T create(@NonNull Class<T> modelClass) { return (T) new StartModelView(getAllWalletsInteractor); }这行得到“使用未经检查或不安全的操作”,你知道为什么吗?
    • 我应该添加@SuppressWarning注解吗?
    • 再次感谢您的帮助!
    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多