web-dev-qa-db-ja.com

Android未解決の参照:findNavControllerエラー

私はKotlinを使用しており、プロジェクトにすべての参照が追加されています。

// Navigation
implementation "Android.Arch.navigation:navigation-common-ktx:$rootProject.nav_version"
implementation "Android.Arch.navigation:navigation-fragment-ktx:$rootProject.nav_version"
implementation "Android.Arch.navigation:navigation-runtime-ktx:$rootProject.nav_version"
implementation "Android.Arch.navigation:navigation-ui-ktx:$rootProject.nav_version"

build.gradleの上にもこれらがあります

apply plugin: 'kotlin-Android' apply plugin: 'kotlin-Android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'androidx.navigation.safeargs'

そして、フラグメント内でこのように使用しています

class HomeFragment : BaseFragment(){

    ...

    override fun onCategoryItemClicked(category: Category) {
        view.findNavController()?.navigate(R.id.phrasesFragment)
    }
}

この生成された拡張子(ファイル)も見ることができます

fun Fragment.findNavController(): NavController =
    NavHostFragment.findNavController(this)
17
Amir Abdi

多くの試行錯誤の後、問題の原因を見つけました。私のgradleをgradle:3.3.0-alpha06にアップグレードすることが鍵でした。私はそれを前のバージョンに戻し、今はうまく機能しています。そこで、#Googleで修正する必要がある何かが起こっていると思います。

dependencies {
    classpath 'com.Android.tools.build:gradle:3.3.0-alpha05'

ちなみに、最新バージョンのgradleを使用している間(これを書いている時点では、gradle:3.3.0-alpha06を意味します)、これは動作します

    Navigation.findNavController(view!!).navigate(R.id.phrasesFragment)

の代わりに

override fun onCategoryItemClicked(category: Category) {
    view.findNavController()?.navigate(R.id.phrasesFragment)
}
6
Amir Abdi