为什么我的NavController无法找到我已经拥有的ID?

时间:2019-11-04 01:17:20

标签: java android

每次启动应用程序时,它都会崩溃,Logcat会这样说:

  

原因:java.lang.IllegalArgumentException:ID未引用此活动内的视图

所以我认为这是说找不到ID,但这是彼此对应的Java文件和XML文件。 Java:

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

XML:

class A:
  pass

class B:
  pass

class Z(object):
  pass

if condition == a:
   z  = Z(A)
elif condition == b:
   z = Z(B)

Logcat说失败,因为Java文件ID未引用此活动内的视图。但是我清楚地输入了ID:nav_host_fragment。 我不知道出了什么问题,当我进入Android Studio时,它没有报告任何错误。请帮忙。

3 个答案:

答案 0 :(得分:2)

SDL_RWops依赖于Navigation.findNavController,该功能仅在您致电findViewById()之后才能生效-也就是说,实际上是将视图添加到活动中。

答案 1 :(得分:1)

使用适当的控制器来避免 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()

答案 2 :(得分:0)

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

代替

val navController = findNavController(R.id.nav_print)

更新到

val navController = findNavController(R.id.nav_host_fragment_content_main)
navController.navigate(R.id.nav_print)