Моя программа для Android раньше работала, я использовал студию Android, чтобы получить нижнюю навигацию по просмотру активности. оно работает. После того, как я запустил настоящее мобильное устройство, оно больше не работает, оно жалуется, как показано ниже:
несовместимые типы: HomeFragment невозможно преобразовать в ViewModelProviderImpl. новый ViewModelProvider(this).get(HomeViewModel.class);
HomeViewModel.java был создан студией Andorid после того, как я решил создать активность просмотра нижней навигации.
package com.abc.myapplication.ui.home;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class HomeViewModel extends ViewModel {
private final MutableLiveData<String> mText;
public HomeViewModel() {
mText = new MutableLiveData<>();
mText.setValue("This is home fragment");
}
public LiveData<String> getText() {
return mText;
}
}
Мой HomeFragment.java, показанный ниже, также был создан Android Studio.
public class HomeFragment extends Fragment {
private FragmentHomeBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
HomeViewModel homeViewModel =
new ViewModelProvider(this).get(HomeViewModel.class);
// new code
HomeViewModel= new ViewModelProvider(this,ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(HomeViewModel.class);
binding = FragmentHomeBinding.inflate(inflater, container, false);
View root = binding.getRoot();
final TextView textView = binding.textHome;
homeViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return root;
}
Кто-нибудь может посоветовать и дать мне образцы кодов, насколько это возможно?




У меня была похожая проблема при использовании Java вместо Kotlin с версией compiledSDK, установленной на 34 в build.gradle(приложении). Установка версии compiledSDK на 33 фактически решает эту проблему. Вам придется понизить версию некоторых библиотек в build.gradle.
большое спасибо. ты сэкономил мне много времени
Будет ли приложение с скомпилированным SDK 33 допущено в Google Play?
Пожалуйста, ознакомьтесь с правилами публикации, в настоящее время, по моему мнению, это разрешено.
попробуй это:
viewModel = new ViewModelProvider(requireActivity()).get(HomeViewModel.class);
Откат androidx.lifecycle до версии 2.6.1 мне помог:
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
Используя Java, мне хватило отката на 2.7.0.
Можете ли вы также включить импорт для вашего класса фрагмента?