在Android导航框架中,使用saveState的效果可以通过以下步骤实现:
MyFragment。class MyFragment : Fragment() {
// 定义需要保存状态的成员变量
private var state: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 恢复保存的状态
state = savedInstanceState?.getString("state")
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// 创建并返回Fragment的视图
return inflater.inflate(R.layout.fragment_my, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// 在视图创建完成后,使用保存的状态更新UI
state?.let {
// 更新UI
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
// 保存状态
outState.putString("state", state)
}
}
MyFragment。
MainActivity中设置导航控制器。class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.navHostFragment) as NavHostFragment
navController = navHostFragment.navController
setupActionBarWithNavController(navController)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp() || super.onSupportNavigateUp()
}
}
这样,当用户导航到其他Fragment并返回到MyFragment时,MyFragment的状态将得到保存并在恢复时使用。