Я использую следующий макет активности с fragment и BottomNavigationView:
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical">
<fragment
android:layout_width = "match_parent"
android:layout_height = "0dp"
android:id = "@+id/fragment"
android:layout_weight = "1"
android:name = "androidx.navigation.fragment.NavHostFragment"
app:newGraph = "@navigation/navigation_bottom"
app:defaultNavHost = "true"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:id = "@+id/bottom_navigation_view"
app:menu = "@menu/bottom_navigation_menu"/>
</LinearLayout>
В своей деятельности я пытаюсь настроить Nav Controller, но получаю следующую ошибку:
Cannot resolve method 'setupWithNavController(androidx.navigation.NavController)'
Это то, что я пробовал:
navController = Navigation.findNavController(this, R.id.fragment);
BottomNavigationView bnv = findViewById(R.id.bottom_navigation_view);
bnv.setupWithNavController(navController); //Error
NavigationUI.setupActionBarWithNavController(this, navController);
Мои зависимости:
implementation 'android.arch.navigation:navigation-fragment:1.0.0-rc02'
implementation 'android.arch.navigation:navigation-ui:1.0.0-rc02'
Как я могу подключить это? Спасибо!
Убедитесь, что эти два свойства включены в вашем gradle.properties.
android.useAndroidX=true
android.enableJetifier=true
Обновлять
И убедитесь, что вы тоже используете эти библиотеки.
implementation 'androidx.core:core: 1.0.1'
implementation 'androidx.appcompat:appcompat:1.0.2
В файле gardle.properties.
Просто добавил обе строки кода в gradle.properties ниже org.gradle.jvmargs=-Xmx1536m и все испортилось :( Я добавил в правильном месте?
Не могли бы вы указать точное место, где добавить android.useAndroidX=true и android.enableJetifier=true? Просто добавил обе зависимости и имеет такое же поведение.
Синтаксис bnv.setupWithNavController использует метод расширения Kotlin — вы должны использовать Kotlin и зависимости -ktx, чтобы иметь доступ к расширениям Kotlin в соответствии с примечанием в Документация по объявлению зависимостей:
implementation 'android.arch.navigation:navigation-fragment-ktx:1.0.0-rc02'
implementation 'android.arch.navigation:navigation-ui-ktx:1.0.0-rc02'
Если вы пишете код Java, вам нужно напрямую использовать методы NavigationUI:
NavigationUI.setupWithNavController(bnv, navController);
Он использует Java.
Я пишу на Java, а не на Котлине. Просто добавил в качестве теста оба, и у меня такая же ошибка.
Добавлено примечание о том, что вы должны использовать синтаксис NavigationUI для использования Java.
Получение следующей ошибки: Cannot resolve method 'setupWithNavController(com.google.android.material.bottomnavigation.BottomNavigationView, androidx.navigation.NavController)'
Похоже, вы либо вообще не используете AndroidX, либо неправильно перешли на AndroidX в соответствии с инструкции, либо вам может просто понадобиться выполнить очистку и перестроить после перехода на AndroidX.
Да, проблема была в том, что я неправильно перешел на AndroidX и NavigationUI.setupWithNavController(bnv, navController); сделал свое дело. Большое тебе спасибо!
Я также пробовал свой код в Kotlin, и эти две зависимости являются обязательными, как объясняется в вашем ответе. Тоже проголосовал. Еще раз спасибо @ianhanniballake
Этот тип строк (с реализацией) можно добавить в раздел
dependencies {
implementation 'androidx.core:core: 1.0.1'
implementation 'androidx.appcompat:appcompat:1.0.2
}
в приложении/build.gradle. И этот тип строк с (android.useAndroidX=true и android.enableJetifier=true) можно добавить в gradle.properties
android.useAndroidX=true
android.enableJetifier=true
Но, пожалуйста, проверьте, прежде чем это еще не существует :)
Спасибо, но, пожалуйста, укажите точное место, в котором я должен добавить эти строки.