Android 配置更改后导航组件重置为起始目的地
Android navigation component resets to start destination after configuration change
-
android
-
onconfigurationchanged
-
android-architecture-components
-
android-jetpack
-
android-architecture-navigation
我正在使用 Android 导航组件并且我有一个包含三个片段的 activity
如果我在第二个片段中并旋转屏幕强制 activity 重新启动导航返回到起始目的地。
当 activity 重新启动时,navhostFragment 不应该保留图表的状态吗?
或者这里的默认行为是什么?
我不想添加以下即使添加它"works"
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
因为我不想自己处理方向变化,所以我希望它能被系统正常处理并且仍然保留导航状态
如果有帮助,我会提供一些我的代码
在 activity 中我使用 navController.setGraph() 这样我就可以像这样将数据传递到起始目的地
navController = Navigation.findNavController(
this,
R.id.nav_host_fragment
)
setSupportActionBar(findViewById(R.id.toolbar))
appBarConfiguration = AppBarConfiguration.Builder(navController.graph).build()
supportActionBar?.setDisplayHomeAsUpEnabled(true)
intent.putExtra("EXTRA_KEY","some_data")
navController.setGraph(R.navigation.nav_graph,intent.extras)
我使用这个
从一个片段导航到另一个片段
navController.navigate(FirstFragmentDirections.actionFirstFragmentToSecondFragment())
这里是 nav_graph
中的代码
<fragment
android:id="@+id/FirstFragment"
android:name="com.example.app.presentation.ui.FirstFragment"
android:label="FirstFragment" >
<action
android:id="@+id/action_FirstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:enterAnim="@anim/enter_from_right"
app:exitAnim="@anim/exit_to_left"
app:popEnterAnim="@anim/enter_from_left"
app:popExitAnim="@anim/exit_to_right"
/>
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.example.app.presentation.ui.secondFragment"
android:label="secondFragment"
tools:layout="@layout/fragment_second" />
感谢任何帮助谢谢
您通常不需要自己调用 setGraph()
,但在这种特殊情况下您可以像这样解决它(它实际上仍会按您预期的那样工作,因为 NavController / Navigator 会跨配置正确恢复状态自动更改和处理死亡):
if (savedInstanceState == null) {
navController.setGraph(R.navigation.nav_graph,intent.extras)
}
android
onconfigurationchanged
android-architecture-components
android-jetpack
android-architecture-navigation
我正在使用 Android 导航组件并且我有一个包含三个片段的 activity 如果我在第二个片段中并旋转屏幕强制 activity 重新启动导航返回到起始目的地。
当 activity 重新启动时,navhostFragment 不应该保留图表的状态吗?
或者这里的默认行为是什么?
我不想添加以下即使添加它"works"
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
因为我不想自己处理方向变化,所以我希望它能被系统正常处理并且仍然保留导航状态
如果有帮助,我会提供一些我的代码
在 activity 中我使用 navController.setGraph() 这样我就可以像这样将数据传递到起始目的地
navController = Navigation.findNavController(
this,
R.id.nav_host_fragment
)
setSupportActionBar(findViewById(R.id.toolbar))
appBarConfiguration = AppBarConfiguration.Builder(navController.graph).build()
supportActionBar?.setDisplayHomeAsUpEnabled(true)
intent.putExtra("EXTRA_KEY","some_data")
navController.setGraph(R.navigation.nav_graph,intent.extras)
我使用这个
从一个片段导航到另一个片段navController.navigate(FirstFragmentDirections.actionFirstFragmentToSecondFragment())
这里是 nav_graph
中的代码<fragment
android:id="@+id/FirstFragment"
android:name="com.example.app.presentation.ui.FirstFragment"
android:label="FirstFragment" >
<action
android:id="@+id/action_FirstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:enterAnim="@anim/enter_from_right"
app:exitAnim="@anim/exit_to_left"
app:popEnterAnim="@anim/enter_from_left"
app:popExitAnim="@anim/exit_to_right"
/>
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.example.app.presentation.ui.secondFragment"
android:label="secondFragment"
tools:layout="@layout/fragment_second" />
感谢任何帮助谢谢
您通常不需要自己调用 setGraph()
,但在这种特殊情况下您可以像这样解决它(它实际上仍会按您预期的那样工作,因为 NavController / Navigator 会跨配置正确恢复状态自动更改和处理死亡):
if (savedInstanceState == null) {
navController.setGraph(R.navigation.nav_graph,intent.extras)
}