Компонент навигации Android сбрасывается до пункта назначения после изменения конфигурации

Я использую компонент навигации Android, и у меня есть действие с тремя фрагментами, если я нахожусь во втором фрагменте и поворачиваю экран, заставляя действие перезапускать навигацию, возвращаемую в начальный пункт назначения.

не должен ли navhostFragment сохранять состояние графика при перезапуске активности?

или что здесь происходит по умолчанию?

Я не хочу добавлять следующее, хотя добавление "работает"

 android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"

потому что я не хочу сам обрабатывать изменения ориентации, я хочу, чтобы система обрабатывала их как обычно и при этом сохраняла состояние навигации.

Я предоставлю часть своего кода, если это поможет

в действии я использую 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" />

любая помощь приветствуется, спасибо




Ответы (1)


Обычно вам никогда не нужно вызывать setGraph() самостоятельно, но в данном конкретном случае вы можете обойти это так (и на самом деле он по-прежнему будет работать так, как вы ожидаете, потому что NavController / Navigator правильно восстанавливает состояние при изменении конфигурации и автоматически обрабатывает смерть):

if (savedInstanceState == null) {
    navController.setGraph(R.navigation.nav_graph,intent.extras)
}
person EpicPandaForce    schedule 02.06.2020
comment
спасибо, я попробовал, и он исправил ситуацию. поэтому установка графика в onCreate - это то, что заставляло его сбрасываться. большое спасибо - person amjad masri; 02.06.2020
comment
Что это за intent.extras? что мы передаем в этом - person Abraham Mathew; 21.08.2020
comment
Я думаю, что аргументы, переданные в начальный пункт назначения - person EpicPandaForce; 21.08.2020