NavHostFragment недоступен из XML - PullRequest
0 голосов
/ 14 мая 2018

Я хотел попробовать новую навигационную библиотеку. После выполнения этого правила во время выполнения возникла ошибка:

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, как упоминалось в в этом ответе . Не забудьте аннулировать кэш и перезапустить его, чтобы удалить предупреждения в коде.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Да, как упоминал Леви Альбукерке, это известная ошибка в последнем выпуске Canary Android Studio (14).Вы можете проголосовать за эту ошибку, подписаться и предоставить некоторую полезную информацию здесь .

Обновление:

Проблема будет исправлена ​​в плагине Android Gradle 3.2.0,0-alpha17

0 голосов
/ 16 мая 2018

Видимо, см. здесь и здесь , использование Jetifier и Android X все еще находится в процессе рефакторинга. В этом Google I / O говорят, что они 'Мы попросили нас подождать Canary 15, в котором есть некоторые исправления ошибок.

Попробуйте сейчас использовать навигационную библиотеку со старой библиотекой поддержки.

Редактировать: Android Studio3.2 Canary 15 доступен для скачивания, все отлично работает для навигационной библиотеки.После того, как вы закончите установку, очистите беспорядок, сделав недействительным кеш, чтобы увидеть, все ли в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...