我正在使用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)
}