Начать активность с любым из двух фрагментов
У меня есть активность, и я использовал навигационный график для навигации по трем фрагментам. Это идет от 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 навигации.