# 🚀 Navigation 高级功能更新总结 ## 📌 更新概述 已添加高级的 Navigation 扩展和工具类,提供优雅的 DSL 风格 API 来管理应用导航。 **新增内容**: - ✅ `NavigationExt.kt` - 核心扩展和工具类 - ✅ `AppNavigation.kt` - 应用导航图构建器 - ✅ `NavigationExample.kt` - 完整的使用示例 - ✅ `ADVANCED_NAVIGATION.md` - 详细的使用文档 - ✅ 更新 `MainActivity.kt` - 使用新的导航 API --- ## 🎯 核心 API ### 1. Routes 常量对象 ```kotlin object Routes { const val HOME = "home" const val SETTINGS = "settings" } ``` ### 2. NavigationEvent 密封类 ```kotlin sealed class NavigationEvent { object NavigateToHome : NavigationEvent() object NavigateToSettings : NavigationEvent() object NavigateUp : NavigationEvent() data class NavigateToRoute(val route: String) : NavigationEvent() } ``` ### 3. NavigationManager 工具类 ```kotlin // 安全导航(防止重复点击) NavigationManager.navigateSafe(navController, route) // 导航并清理 Back Stack NavigationManager.navigateWithClear(navController, route, popUpTo) // 处理导航事件 NavigationManager.handleNavigationEvent(navController, event) ``` ### 4. NavController 扩展方法 ```kotlin // 快速方法 navController.navigateToHome() navController.navigateToSettings() navController.navigateSafe(route) navController.navigateAndClear(route, popUpTo) ``` ### 5. NavigationHelper 类 ```kotlin // 处理菜单项 navigationHelper.handleMenuItemClick(itemId) // 处理返回按钮 navigationHelper.handleBackPressed() // 检查状态 navigationHelper.getCurrentRoute() navigationHelper.isAtTopDestination(route) ``` --- ## 💻 快速使用示例 ### 示例 1:简单导航 ```kotlin // 使用快捷方法 button.setOnClickListener { navController.navigateToSettings() } ``` ### 示例 2:安全导航 ```kotlin // 防止快速点击导致的多次导航 button.setOnClickListener { navController.navigateSafe(Routes.HOME) } ``` ### 示例 3:ViewModel 中的导航 ```kotlin class AppViewModel : ViewModel() { private val _navigationEvent = MutableLiveData() val navigationEvent: LiveData = _navigationEvent fun goToSettings() { _navigationEvent.value = NavigationEvent.NavigateToSettings } } // 在 Fragment 中观察 viewModel.navigationEvent.observe(viewLifecycleOwner) { event -> NavigationManager.handleNavigationEvent(navController, event) } ``` ### 示例 4:Back Stack 管理 ```kotlin // 导航并清理历史记录 navController.navigateAndClear( route = Routes.HOME, popUpTo = Routes.SETTINGS ) ``` --- ## 📂 新增文件 ### 1. 核心库文件 **NavigationExt.kt** (250 行) - Routes 常量对象 - NavigationEvent 密封类 - NavigationManager 工具类 - NavController 扩展方法 - NavigationHelper 类 **AppNavigation.kt** (100 行) - 应用导航图构建函数 - 路由定义 - 导航扩展方法 ### 2. 示例文件 **NavigationExample.kt** (300 行) - AppViewModel 示例 - Fragment 使用示例 - 链式导航示例 - 条件导航示例 - 完整使用演示 ### 3. 文档文件 **ADVANCED_NAVIGATION.md** - 完整的 Navigation 高级用法指南 - 代码示例 - 最佳实践 - 测试方法 --- ## 🔄 使用流程 ### 在 Activity 中使用 ```kotlin class MainActivity : AppCompatActivity() { private lateinit var navController: NavController private lateinit var navigationHelper: NavigationHelper override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setupNavigation() } private fun setupNavigation() { val navHostFragment = supportFragmentManager .findFragmentById(R.id.nav_host_fragment) as NavHostFragment navController = navHostFragment.navController navigationHelper = NavigationHelper(navController) } override fun onBackPressed() { if (!navigationHelper.handleBackPressed()) { @Suppress("DEPRECATION") super.onBackPressed() } } } ``` ### 在 Fragment 中使用 ```kotlin class HomeFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val navController = findNavController() // 导航到设置 view.findViewById