为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的 NavController 找不到我已有的 ID?

为什么我的 NavController 找不到我已有的 ID?

慕无忌1623718 2024-01-28 16:12:58
每次我启动应用程序时,它都会崩溃,Logcat 会显示以下内容:引起原因:java.lang.IllegalArgumentException:ID 未引用此 Activity 内的视图所以我认为这是说没有找到ID,但这是我的Java文件和XML文件相互对应。爪哇:NavController navController = Navigation.findNavController(this,R.id.nav_host_fragment);XML:<com.google.android.material.bottomnavigation.BottomNavigationView        android:id="@+id/nav_view"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginStart="0dp"        android:layout_marginEnd="0dp"        android:background="?android:attr/windowBackground"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintLeft_toLeftOf="parent"        app:layout_constraintRight_toRightOf="parent"        app:menu="@menu/bottom_nav_menu" />    <fragment        android:id="@+id/nav_host_fragment"        android:name="androidx.navigation.fragment.NavHostFragment"        android:layout_width="match_parent"        android:layout_height="match_parent"        app:defaultNavHost="true"        app:layout_constraintBottom_toTopOf="@id/nav_view"        app:layout_constraintHorizontal_bias="1.0"        app:layout_constraintLeft_toLeftOf="parent"        app:layout_constraintRight_toRightOf="parent"        app:layout_constraintTop_toTopOf="parent"        app:layout_constraintVertical_bias="0.285"        app:navGraph="@navigation/mobile_navigation" />Logcat 说失败,因为 java 文件 ID 没有引用此 Activity 内的视图。但我明明输入了ID:nav_host_fragment。我不知道出了什么问题,当我进入 Android Studio 时,它没有报告任何错误。请帮忙。
查看完整描述

4 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

Navigation.findNavController依赖于findViewById(),它仅在您调用后才起作用setContentView()- 即,实际上将您的视图添加到您的活动中。



查看完整回答
反对 回复 2024-01-28
?
慕慕森

TA贡献1856条经验 获得超17个赞

使用适当的控制器来避免 ID 不引用此 Activity 或片段内的视图?

如果您使用的是 Java

在活动中使用

NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment)

在片段中使用

NavController navController = NavHostFragment.findNavController(this)
// or
NavHostFragment.findNavController(view)

如果你正在使用 kotlin

在活动中使用

val navController = findNavController(R.id.nav_host_fragment)

在片段中使用

val navController = findNavController()


查看完整回答
反对 回复 2024-01-28
?
HUH函数

TA贡献1836条经验 获得超4个赞

我认为一旦创建了视图我们就必须使用它。尝试将代码放入 onPostCreate 中,效果很好。


注意:它在 onCreateView 中不起作用


override fun onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {

    super.onPostCreate(savedInstanceState, persistentState)


    val navController=findNavController(R.id.navHostFragment)


}我认为一旦创建了视图我们就必须使用它。尝试将代码放入 onPostCreate 中,效果很好。


注意:它在 onCreateView 中不起作用


override fun onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {

    super.onPostCreate(savedInstanceState, persistentState)


    val navController=findNavController(R.id.navHostFragment)


}


查看完整回答
反对 回复 2024-01-28
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

万一有人遇到我遇到的问题。我试图访问导航中的嵌套资源。


代替


val navController = findNavController(R.id.nav_print)

更新至


val navController = findNavController(R.id.nav_host_fragment_content_main)

navController.navigate(R.id.nav_print)


查看完整回答
反对 回复 2024-01-28
  • 4 回答
  • 0 关注
  • 44 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信