无法解析片段中的ViewModelProvider构造? [英] Cannot resolve ViewModelProvider construction in a fragment?

查看:326
本文介绍了无法解析片段中的ViewModelProvider构造?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我花了很多时间试图弄清楚为什么在下面的代码(最后)中,ViewModelProvider(this)出现错误.我也尝试了getActivity()而不是'this',同样的问题.我收到的错误是无法解析构造函数..."

I have been spending a lot of time trying to figure out why in the code below (towards the end), I get an error on ViewModelProvider(this). I also tried getActivity() instead of 'this', same issue. The error I get is "Cannot resolve constructor ..."


import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;



public class ItemSetupFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_setup, container, false);

        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        ItemSetupFragmentModel model = new ViewModelProvider(this).get(ItemSetupFragmentModel.class);
        model.getKids().observe(this, users -> {
            // update UI
        });
    }
}

推荐答案

首先,您需要使用最新版本的生命周期扩展.应该是:

Firstly you need to use the latest version of lifecycle extension. It should be:

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation "androidx.lifecycle:lifecycle-viewmodel:2.2.0" 

或任何更新的版本.

然后,您应该使用requireActivity()而不是getActivity().这样,您将确保该活动已附加且未获取NullPointerException.

Then you should use requireActivity() instead of getActivity(). This way you will ensure that the activity is attached an not getting a NullPointerException.

ItemSetupFragmentModel model = new ViewModelProvider(requireActivity()).get(ItemSetupFragmentModel.class);

注意: ViewModel概述声明依赖项

将库添加到Gradle文件后,我不得不重新启动缓存. 无需使用requireActivity()this就足够了.

I had to restart cache after adding the library to the Gradle file. There is no need to use requireActivity(), this is enough.

这篇关于无法解析片段中的ViewModelProvider构造?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆