You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用按Home键或退出后如何返回最后一个Fragment?

解决Navigation Component重启后回到启动页的问题

Navigation Component 默认不会自动持久化导航栈状态,导致按Home键或退出应用后重启,会回到导航图设置的startDestination(启动页)。要实现回到最后停留的Fragment,需要手动保存和恢复导航状态,分两种场景处理:

1. 处理按Home键的临时退出场景

通过Activity的onSaveInstanceState保存导航状态,在onCreate中恢复:

  • 保存状态:
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    findNavController(R.id.nav_host_fragment).saveState()?.let {
        outState.putBundle("nav_state", it)
    }
}
  • 恢复状态:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    val navController = findNavController(R.id.nav_host_fragment)
    savedInstanceState?.getBundle("nav_state")?.let {
        navController.restoreState(it)
    }
}

2. 处理完全退出应用的场景

完全退出应用时,savedInstanceState不会保留,需要用SharedPreferences持久化导航状态:

  • 在onStop中保存到SharedPreferences:
override fun onStop() {
    super.onStop()
    val navController = findNavController(R.id.nav_host_fragment)
    navController.saveState()?.let { state ->
        getSharedPreferences("nav_prefs", MODE_PRIVATE)
            .edit()
            .putBundle("nav_state", state)
            .apply()
    }
}
  • 在onCreate中优先从savedInstanceState恢复,失败则从SharedPreferences读取:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    val navController = findNavController(R.id.nav_host_fragment)
    savedInstanceState?.getBundle("nav_state")?.let {
        navController.restoreState(it)
    } ?: run {
        val prefs = getSharedPreferences("nav_prefs", MODE_PRIVATE)
        prefs.getBundle("nav_state")?.let {
            navController.restoreState(it)
        }
    }
}

注意事项

  • 确保导航图关联的Activity中,没有在onCreate里强制调用navController.navigate()跳转到启动页的代码;
  • 如果需要首次启动必须进入启动页,可以在恢复状态前通过SharedPreferences标记是否为首次打开,再决定是否重置导航栈。

内容的提问来源于stack exchange,提问作者Alaa Hosnii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:39:19