私は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)
多くの試行錯誤の後、問題の原因を見つけました。私の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)
}