web-dev-qa-db-ja.com

上に追加する代わりにNavController.navigateを使用してフラグメントを置き換える方法

FragmentManagerに依存するのではなく、「新しい」Android Jetpackナビゲーションを使用しています。シンプルなメインレイアウトがあります。

<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:tools="http://schemas.Android.com/tools"
        xmlns:app="http://schemas.Android.com/apk/res-auto"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        tools:context=".activities.MainActivity">

    <FrameLayout
            Android:id="@+id/root"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toTopOf="@id/bottomNav">

        <fragment
                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/navigation_app" />

    </FrameLayout>
    <com.google.Android.material.bottomnavigation.BottomNavigationView
            Android:id="@+id/bottomNav"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            app:menu="@menu/bottom_menu"
            app:layout_constraintBottom_toBottomOf="@+id/root"/>



</Android.support.constraint.ConstraintLayout>

さらに、2つの追加レイアウト:TextViewを備えた「Splashscreen」、ボタンを備えた「Login」。スプラッシュスクリーンフラグメントは開始点として使用され、リスナーは次のように定義されています。

override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        textView.setOnClickListener{
            findNavController(nav_Host_fragment).navigate(R.id.action_splashScreenFragment_to_loginFragment)
        }
    }

スクリーンショット

TextViewフラグメントをButtonフラグメントで置き換える代わりに、Buttonフラグメントが一番上にスタックされます。

背景色やクリック可能なパラメーターの設定などの回避策に遭遇しただけで、動作はまったく同じであると考えられますが、以下のフラグメントは単に隠されています。 NavControllerを使用してフラグメントを適切に切り替える方法は?

2
nluk

バックスタックをクリアするには、popUpToおよびpopUpToInclusiveを使用する必要があります。 Android Developers docs を確認してください

0
budgie