当我在android应用程序中使用底部导航导航到不同的片段时,我如何保持计时器运行



当我使用底部导航进行导航时,碎片被销毁,计时器重置为00:00。我用过计时表。我尝试过retainInstance=true,但它只有在屏幕旋转时才有帮助。

主活动.kt

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.nav_host_fragment) as NavHostFragment
navController =navHostFragment.findNavController()
bottom_nav.setupWithNavController(navController)
}
} 

TimerFragment.kt

class TimerFragment : Fragment(R.layout.fragment_timer) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

//code

}
//Few functions
}

我建议您使用ViewModel方法,即ActivityViewModelFragmentViewModel

将计时器值保存在FragmentViewModel中,当fragment即将销毁时,更新"活动"中ActivityViewModel中的计时器值。

类似地,在fragmentonCreate()中,从ActivityViewModel更新FragmentViewModel中的定时器值

究其原因,是ViewModel在活动娱乐后保存了数据。

最新更新