androidx.lifecycle.ViewModelStoreOwner в ViewModelProvider нельзя применить к androidx.lifecycle.LifeCycleOwner - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь реализовать ViewModel, LiveData внутри фрагмента. Пройдя Средний блог , я попытался использовать метод getViewLifecycleOwner () при объявлении объекта ViewModel.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
viewModel = new ViewModelProvider(getViewLifecycleOwner()).get(MainActivityViewModel.class);
}

Но появляется следующая ошибка:

androidx.lifecycle.ViewModelStoreOwner в ViewModelProvider нельзя применить к androidx.lifecycle. LifeCycleOwner

enter image description here

Когда я пытаюсь преобразовать это значение в ViewModelStoreOwner, приложение вылетает, показывая следующую ошибку:

java .lang.ClassCastException: androidx.fragment.app.FragmentViewLifecycleOwner нельзя преобразовать в androidx.lifecycle.ViewModelStoreOwner

Как объявить жизненный цикл Fragment с ViewModel эффективно?

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Используйте эту область видимости для вашего фрагмента:

viewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);

Или это, если вы хотите, чтобы она охватывала вашу деятельность:

viewModel = new ViewModelProvider(requireActivity()).get(MainActivityViewModel.class);
0 голосов
/ 03 марта 2020

Фрагмент является подклассом LifecycleOwner. Таким образом, вы можете напрямую передать Fragment ссылку на параметр LifecycleOwner.

Код будет таким:

viewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);
...