Начать активность с любым из двух фрагментов

У меня есть активность, и я использовал навигационный график для навигации по трем фрагментам. Это идет от Fragment1 к Fragment2 и Fragment3, и это работает.

Однако из Fragment3 я начинаю новую активность. В этом упражнении я хочу отобразить любой из двух фрагментов в своем файле . Давайте позвонимFragmentListи одинFragmentEmpty.

Я создал для этого навигационный график:

      <navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav"
    app:startDestination="@id/empty_fragment">

    <fragment
        android:id="@+id/empty_fragment"
        android:name="com.project.EmptyFragment"
        android:label="EmptyFragment" />
    <fragment
        android:id="@+id/list_fragment"
        android:name="com.project.ListFragment"
        android:label="ListFragment" />
</navigation>

Я понимаю, что здесь в основном работает как «по умолчанию», когда я действительно хочу отобразить одно из двух в качестве реального начального пункта назначения. Поэтому в случае, когда я хочу, это будет излишне установлено, а затем перезаписано. Но это обязательное поле, поэтому я должен его установить.

Чтобы начать действие, отображающее , поместите это в мои действияonCreateфункция:

      supportFragmentManager.beginTransaction()
            .add(R.id.fragment_container, FragmentList::class.java, Bundle())
            .commit()

Результат выглядит следующим образом:

Серая часть - это , а белая часть - это . По какой-то причине активность неуклюже отображает их обоих. Хотя у меня только одинFragmentContainerView:

      <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:navGraph="@navigation/nav"
        tools:layout="@layout/fragment_empty" />

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

Когда я пытался исследовать проблему, я в основном попадал в учебные пособия и вопросы о переполнении стека, когда кто-то хочет перемещаться между двумя фрагментами в рамках действия. Это не совсем то, что я хочу. я никогда не перейду сempty_fragmentкlist_fragmentили наоборот. Я просто хочу, чтобы активность отображалась либо при ее запуске, либо в зависимости от условия.

Я новичок в работе с фрагментами и навигационными графами, так что я мог бы кое-что перепутать; Пожалуйста, примите это во внимание.

Обобщить:

  • Как я могу отобразить один из двух фрагментов в моей деятельности при ее создании?
  • Это правильный способ добиться этого?
  • В чем причина нечетного сложенного отображения моей активности, построенной с двумя фрагментами?

1 ответ

Одно из решений состоит в том, чтобы самостоятельно написать логику, чтобы решить, какой фрагмент показывать, используяFragmentManager. Это означает, что вам вообще не следует использовать API навигации.

Другие вопросы по тегам