当androidx.fragment.app.FragmentContainerView用作 navHost 而不是常规fragment应用程序时,在方向更改后无法导航到目的地。
我收到以下错误:
java.lang.IllegalStateException: no current navigation node
是否有我应该知道的正确使用它的问题,或者我使用导航组件的方式不正确?
带有视图的简单活动 xml:
...
<androidx.fragment.app.FragmentContainerView
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_behavior="@string/appbar_scrolling_view_behavior"
app:navGraph="@navigation/nav_simple" />
...
Run Code Online (Sandbox Code Playgroud)
导航代码:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_legislator.xml"
app:startDestination="@id/initialFragment">
<fragment
android:id="@+id/initialFragment"
android:name="com.example.fragmenttag.InitialFragment"
android:label="Initial Fragment"
tools:layout="@layout/initial_fragment">
<action
android:id="@+id/action_initialFragment_to_destinationFragment"
app:destination="@id/destinationFragment" />
</fragment>
<fragment
android:id="@+id/destinationFragment"
android:name="com.example.fragmenttag.DestinationFragment"
android:label="Destination Fragment"
tools:layout="@layout/destination_fragment" />
</navigation>
Run Code Online (Sandbox Code Playgroud)
这是一个 github 存储库,您可以在其中轻松重现错误:https : //github.com/dmytroKarataiev/navHostBug
我曾尝试阅读此内容,但它并没有解决我的问题
所以我使用此代码导航到下一个目的地
val nextDirection = CreateEventNameFragmentDirections.actionToCreateEventType(userKM, newEvent)
findNavController().navigate(nextDirection)
Run Code Online (Sandbox Code Playgroud)
但它在我错误旋转设备后崩溃
java.lang.IllegalStateException: 没有当前导航节点
我用这个更新gradle
Run Code Online (Sandbox Code Playgroud)implementation 'android.arch.navigation:navigation-fragment-ktx:2.2.1' implementation 'android.arch.navigation:navigation-ui-ktx:2.2.1'
但它仍然不起作用,它仍然崩溃。我该怎么办 ?这是我的主要活动
class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener {
private lateinit var navController : NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initial Setup views
navController = Navigation.findNavController(this,R.id.nav_host_fragment)
setupBottomNavMenu()
setupActionBar()
// Add Listeners
navController.addOnDestinationChangedListener(this)
}
private fun setupBottomNavMenu() {
bottom_nav.setupWithNavController(navController)
}
private fun setupActionBar() {
generalToolbar.title = ""
searchToolbar.title = ""
searchWithBackButtonToolbar.title = ""
// set up top hierarchy destination
val appBarConfiguration …Run Code Online (Sandbox Code Playgroud) android android-navigation android-architecture-components android-architecture-navigation android-jetpack-navigation