Я пытаюсь получить YouTube как bottom navigation behaviour
, используя architecture navigation component
. Например, если у меня есть fragments
(tail)A > B > C > D > E(top)
в back stack
, а затем снова я посещаю B
, а затем C
(C
является верхним фрагментом сейчас), а затем, если я буду нажимать кнопку возврата, тогда я долженget (First out)C < B < E < D < A(Last out)
.
B
и C
должны быть старыми фрагментами, а не заменяться новыми фрагментами (Data should not be destroyed when i revisit any fragment).
Мой код, который размещен ниже, не работает (не даеттакой эффект, как YouTube).
MainActivity.kt
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
val bottomNavView = binding.appBottomNavView
val navController = findNavController(R.id.app_nav_host_fragment)
val navBuilder = NavOptions.Builder()
bottomNavView.setupWithNavController(navController)
val onNav = BottomNavigationView.OnNavigationItemSelectedListener{ menuItem ->
when(menuItem.itemId)
{
R.id.homeFragment -> {
val navOption = navBuilder.setPopUpTo(R.id.homeFragment, false).build()
navController.navigate(R.id.homeFragment, null, navOption)
true
}
R.id.searchFragment -> {
val navOption = navBuilder.setPopUpTo(R.id.searchFragment, false).build()
navController.navigate(R.id.searchFragment, null, navOption)
true
}
R.id.shareFragment -> {
val navOption = navBuilder.setPopUpTo(R.id.shareFragment, false).build()
navController.navigate(R.id.shareFragment, null, navOption)
true
}
R.id.alertFragment -> {
val navOption = navBuilder.setPopUpTo(R.id.alertFragment, false).build()
navController.navigate(R.id.alertFragment, null, navOption)
true
}
R.id.profileFragment -> {
val navOption = navBuilder.setPopUpTo(R.id.profileFragment, false).build()
navController.navigate(R.id.profileFragment, null, navOption)
true
}
else -> {
true
}
}
}
bottomNavView.setOnNavigationItemSelectedListener(onNav)
}
}
Menu.xml
<menu>
<item
android:id="@+id/homeFragment"
android:icon="@drawable/ic_house"
android:menuCategory="secondary"
android:title="" />
<item
android:id="@+id/searchFragment"
android:icon="@drawable/ic_search"
android:menuCategory="secondary"
android:title="" />
<item
................
................ />
<item
................
................ />
<item
................
................ />
</menu>
navigation.xml
<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/app_nav"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.ui.HomeFragment"
android:label="HomeFragment"
tools:layout="@layout/fragment_home"/>
<fragment
android:id="@+id/searchFragment"
android:name="com.example.ui.SearchFragment"
android:label="SearchFragment"
tools:layout="@layout/fragment_search"/>
<fragment
android:id="@+id/shareFragment"
android:name="com.example.ui.ShareFragment"
android:label="ShareFragment"
tools:layout="@layout/fragment_share"/>
<fragment
android:id="@+id/alertFragment"
android:name="com.example.ui.AlertFragment"
android:label="AlertFragment"
tools:layout="@layout/fragment_alert"/>
<fragment
android:id="@+id/profileFragment"
android:name="com.example.ui.ProfileFragment"
android:label="ProfileFragment"
tools:layout="@layout/fragment_profile"/>
</navigation>