Я хотел попробовать новую навигационную библиотеку. После выполнения этого правила во время выполнения возникла ошибка:
Caused by: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment androidx.navigation.fragment.NavHostFragment: make sure class name exists, is public, and has an empty constructor that is public
в файле ресурсов activity_home.xml
. Этот файл очень прост:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.home.HomeActivity">
<fragment
android:id="@+id/fragment_navigation_host"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/navigation_home" />
</FrameLayout>
Я посмотрел на исходный код NavHostFragment
и заметил, что он использует android.support.v4.app.Fragment
, а все мое приложение использует androidx.fragment.app.Fragment
.
Я не уверен, что это проблема, но я включаю некоторые из моих зависимостей ниже:
// AndroidX
implementation "androidx.appcompat:appcompat:$appCompatVersion"
implementation "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycleVersion"
implementation "androidx.recyclerview:recyclerview:$recyclerViewVersion"
implementation "androidx.room:room-runtime:$roomVersion"
implementation "androidx.room:room-rxjava2:$roomVersion"
kapt "androidx.room:room-compiler:$roomVersion"
// Navigation
implementation "android.arch.navigation:navigation-fragment-ktx:$navigationVersion"
implementation "android.arch.navigation:navigation-ui-ktx:$navigationVersion"
Как видите, я использую библиотеки из AndroidX, кроме Navigation, потому что, вероятно, они еще не перенесены. Единственное место в Google, где я могу найти androidx.navigation
, это здесь . К сожалению, Gradle не может загрузить его.
Редактировать
В моем gradle.properties
.
также включен инструмент-джиттификатор.
android.enableJetifier=true
android.useAndroidX=true
Обновление
Это исправлено в Android Studio 3.2 Canary 17, как упоминалось в в этом ответе . Не забудьте аннулировать кэш и перезапустить его, чтобы удалить предупреждения в коде.