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を使用してフラグメントを適切に切り替える方法は?
バックスタックをクリアするには、popUpTo
およびpopUpToInclusive
を使用する必要があります。 Android Developers docs を確認してください