kotlin 使用导航组件的底部导航视图

rqqzpn5f  于 2022-12-30  发布在  Kotlin
关注(0)|答案(1)|浏览(178)

我有一个问题,底部导航视图。我有一个3碎片:MoviesFragment(首页片段),MovieInfoFragment和配置文件片段。它的工作时,使用底部导航视图MoviesFragment-〉配置文件片段ProfileFragment-〉MoviesFragment但不工作时,我从MovieInfoFragment导航到MoviesFragment,我不知道为什么。请帮助
底部导航菜单

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/moviesFragment"
        android:icon="@drawable/ic_home"
        android:title="@string/home" />

    <item
        android:id="@+id/profileFragment"
        android:icon="@drawable/ic_profile"
        android:title="@string/profile" />

</menu>

导航图

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

    <fragment
        android:id="@+id/moviesFragment"
        android:name="com.sideki.imdb_app.ui.movies_list.MoviesFragment"
        android:label="fragment_movies"
        tools:layout="@layout/fragment_movies">

        <action
            android:id="@+id/to_movieInfoFragment"
            app:destination="@id/movieInfoFragment" />
    </fragment>

    <fragment
        android:id="@+id/movieInfoFragment"
        android:name="com.sideki.imdb_app.ui.movie_info.MovieInfoFragment"
        android:label="MovieInfoFragment">

        <argument
            android:name="movieId"
            app:argType="string" />
    </fragment>
    <fragment
        android:id="@+id/profileFragment"
        android:name="com.sideki.imdb_app.data.api.ProfileFragment"
        android:label="ProfileFragment" />
</navigation>

类主要活动:片段放射性(){

private lateinit var binding: ActivityMainBinding
private lateinit var navController: NavController

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentNavHost)
    navController = navHostFragment!!.findNavController()
    binding.bottomNavigation.setupWithNavController(navController)
}

也许问题隐藏在堆栈中?

zbdgwd5y

zbdgwd5y1#

我认为问题是,当您从MovieInfoFragment导航到MoviesFragment时,MovieInfoFragment仍然在后堆栈上,因此按下“后退”按钮将使用户返回到MovieInfoFragment,而不是MoviesFragment。
在导航到MoviesFragment时,尝试使用popBackStack()

相关问题