我们应该如何在片段中使用ViewModelPorvider?

问题描述 投票:0回答:2

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

...
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
        });
    }
}
android android-livedata android-architecture-components android-mvvm
2个回答
0
投票

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

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

0
投票

您应通过以下方式实例化viewModel:

ItemSetupFragmentModel model = ViewModelProviders.of(this).get(ItemSetupFragmentModel.class);
© www.soinside.com 2019 - 2024. All rights reserved.