android 当我从底部导航视图中重新选择菜单项时,正在重新创建片段

jxct1oxe  于 2023-04-04  发布在  Android
关注(0)|答案(2)|浏览(162)

我使用底部导航视图与导航组件,当以前选择的菜单项被重新选择片段是重新打开从oncreate
当我打开我的活动文档片段正在加载,当我选择偶数片段并再次重新选择文档片段时,文档片段的先前状态为未加载,而文档片段正在作为新片段加载。
当我再次选择任何片段时,我想加载片段的先前状态。
我不知道如何实现这一点,任何人都有任何想法,我应该如何处理这个问题?

//my activity.kt
navController = findNavController(R.id.fragmentContainerView)
mViewDataBinding?.bottomNavigation?.setupWithNavController(navController)
//my activity.xml
 <fragment
            android:id="@+id/fragmentContainerView"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:defaultNavHost="true"
            app:navGraph="@navigation/menu_navigation"
            app:layout_constraintBottom_toTopOf="@id/bottomNavigation"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"/>

        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottomNavigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:labelVisibilityMode="labeled"
            android:background="@color/backgroundColor"
            app:itemBackground="@color/backgroundColor"
            app:menu="@menu/bottom_navigation_menu"
            app:itemIconTint="@color/bottom_nav_item_color"
            app:itemTextColor="@color/bottom_nav_item_color"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"/>
//navigation file
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/menu_navigation"
    app:startDestination="@id/documentsFragment">

    <fragment
        android:id="@+id/documentsFragment"
        android:name="packagename.DocumentsFragment"
        android:label="DocumentsFragment" />
    <fragment
        android:id="@+id/eventsFragment"
        android:name="packagename.EventsFragment"
        android:label="EventsFragment" />
    <fragment
        android:id="@+id/notesFragment"
        android:name="packagename.NotesFragment"
        android:label="NotesFragment" />
    <fragment
        android:id="@+id/tasksFragment"
        android:name="packagename.TasksFragment"
        android:label="TasksFragment" />
    <fragment
        android:id="@+id/menuFragment"
        android:name="packagename.MenuFragment"
        android:label="MenuFragment" />
</navigation>

我想要的是加载用户之前离开的片段(状态)。

fbcarpbf

fbcarpbf1#

  • 据我所知,当您从BottomNavigation中重新选择片段时,没有办法重新打开它
  • 我在我的项目中确实使用了NavigationComponent和BottomNavigationView。为了解决这个问题,我认为你应该考虑使用Fragment和ViewModel来保持数据状态。然后,当你重新选择它时,只会重新创建片段的视图。
elcex8rz

elcex8rz2#

导航组件支持多个backstack。在您的情况下,
1.你必须把你的家片段作为一个起始目的地
1.添加一个项目单击监听器并使用navController设置它,如下所示。
监听器

binding.bottomNavigation.setOnItemSelectedListener {
    it.onNavDestinationSelected(navController)
}

相关问题