如何在 Android 中设置 Navcontroller?

How to set Nav Controller in AndroidX?

我正在使用以下 activity 布局和 fragmentBottomNavigationView:

<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>

在我的 activity 中,我正在尝试设置导航控制器,但出现以下错误:

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

语法 bnv.setupWithNavController 使用 Kotlin 扩展方法 - 您必须使用 Kotlin 和 -ktx 依赖项才能根据 Declaring dependencies documentation 中的说明访问 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);

此类行(带有实现)可以添加到部分

dependencies {
   implementation 'androidx.core:core: 1.0.1'
   implementation 'androidx.appcompat:appcompat:1.0.2

}

在 app/build.gradle 中。 这种类型的行有(android.useAndroidX=true 和 android.enableJetifier=true) 可以加在gradle.properties

android.useAndroidX=true 
android.enableJetifier=true

但请检查之前是否已经存在:)