![](/img/trans.png)
[英]How to switch between Fragments in default Android Studio Navigation Drawer
[英]how to make animation transition between fragments in navigation by drawer in android
我的应用程序中有一个抽屉,我通过导航切换片段。 当我单击抽屉中的按钮时,我想要 animation 过渡。 我知道如何使用常规按钮执行此操作,但我不知道如何使用导航抽屉执行此操作谢谢。
这是我的主要活动
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()
}
}
这是我的导航 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>
我正在研究这个并且有一个解决方案可以监听导航抽屉的点击并以与按钮相同的方式做出反应。
我正在使用带有多个片段的单个活动。 确保为您的 Fragment 设置导航图,然后使用 Main Activity 中的setNavigationItemSelectedListener
调用正确的FragmentDirections
操作。
在我的示例中, settingsFragment
将加载 animation,但aboutFragment
不会,因为它不调用Directions.action
function。
MainActivity(在 onCreate 函数内)
/** Handle clicks in Nav Drawer **/
val navigationView = findViewById<NavigationView>(R.id.navView)
navigationView.setNavigationItemSelectedListener { menuItem ->
Timber.d("Nav Drawer Item Clicked: %s", menuItem.title)
when (menuItem.itemId) {
R.id.settingsFragment -> {
navController.navigate(
RecipeListFragmentDirections
.actionRecipeListToSettingsFragment()
)
}
R.id.aboutFragment -> {
navController.navigate(R.id.aboutFragment)
}
R.id.refreshRecipes -> {
Timber.i("TODO: Implement repository refresh method call")
}
}
true
}
导航.xml
<?xml version="1.0" encoding="utf-8"?>
<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/navigation"
app:startDestination="@id/recipeList">
<fragment
android:id="@+id/recipeList"
android:name="com.jumptuck.recipebrowser2.recipelist.RecipeListFragment"
tools:layout="@layout/fragment_recipe_list">
<action
android:id="@+id/action_recipeList_to_singleRecipeFragment"
app:destination="@id/singleRecipeFragment"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_right"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_left" />
<action
android:id="@+id/action_recipeList_to_aboutFragment"
app:destination="@id/aboutFragment"
app:enterAnim="@anim/slide_in_left"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_right"
app:popExitAnim="@anim/slide_out_right" />
<action
android:id="@+id/action_recipeList_to_settingsFragment"
app:destination="@id/settingsFragment"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_right"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_left" />
</fragment>
我使用这种方法的原因之一是因为我想从refreshRecipes
菜单项启动服务,而不是导致导航,这会拦截点击。 缺点之一是导航栏项目本身在单击时不显示 animation(但我认为这可以修复)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.