Как переключать фрагменты с помощью анимации в Navigation drawer используя Navigation components
Всем привет. В приложении использую Navigation components и Navigation drawer. Нужно при нажатии на кнопку в navigation drawer фрагмент переключался с помощью анимации. Как это делать в navigation components я знаю но только если при переходе на другой фрагмент нужно нажать обычную кнопку, а вот как это реализовать с использованием navigation drawer я не могу разобраться.
вот код MainActivity
class MainActivity : AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
val navView: NavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
appBarConfiguration = AppBarConfiguration(setOf(
R.id.nav_food_text_analysis,
R.id.nav_recipe_analysis
), drawerLayout)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.nav_host_fragment)
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
}
вот код 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/mobile_navigation"
app:startDestination="@id/nav_food_text_analysis">
<fragment
android:id="@+id/nav_food_text_analysis"
android:name="com.example.nutritionfacts.ui.foodTextAnalysis.FoodAnalysisFragment"
android:label="Food analysis"
tools:layout="@layout/fragment_food_text_analysis" >
<action
android:id="@+id/action_nav_food_text_analysis_to_nav_recipe_analysis"
app:destination="@id/nav_recipe_analysis"
app:enterAnim="@anim/enter_from_right"
app:exitAnim="@anim/exit_to_right"
app:popEnterAnim="@anim/enter_from_right"
app:popExitAnim="@anim/exit_to_right" />
</fragment>
<fragment
android:id="@+id/nav_recipe_analysis"
android:name="com.example.nutritionfacts.ui.recipeAnalysis.RecipeAnalysisFragment"
android:label="Recipe analysis"
tools:layout="@layout/fragment_recipe_analysis" >
<action
android:id="@+id/action_nav_recipe_analysis_to_nav_food_text_analysis2"
app:destination="@id/nav_food_text_analysis"
app:enterAnim="@anim/enter_from_right"
app:exitAnim="@anim/exit_to_right"
app:popEnterAnim="@anim/enter_from_right"
app:popExitAnim="@anim/exit_to_right" />
</fragment>
</navigation>
Заранее спасибо за помощь
Ответы (1 шт):
Для добавления анимации к переходам между фрагментами надо создать объект NavOptions
private val navOptions by lazy {
NavOptions.Builder()
.setLaunchSingleTop(true)
.setEnterAnim(R.anim.enter_from_right)
.setExitAnim(R.anim.exit_to_right)
.setPopEnterAnim(R.anim.enter_from_right)
.setPopExitAnim(R.anim.exit_to_right)
}
А так же добавить NavigationItemSelectedListener для NavView после всех настроек
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
navView.setNavigationItemSelectedListener { item ->
navController.navigate(item.itemId, null, navOptions.build())
drawerLayout.closeDrawers()
true
}
Если вам нужны различные анимации для разных фрагментов, то в setNavigationItemSelectedListener выбирайте нужный через when(item.itemId) и назначайте ему свой набор анимаций через NavOptions