当我使用底部导航进行导航时,碎片被销毁,计时器重置为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方法,即ActivityViewModel
和FragmentViewModel
将计时器值保存在FragmentViewModel
中,当fragment
即将销毁时,更新"活动"中ActivityViewModel
中的计时器值。
类似地,在fragment
的onCreate()
中,从ActivityViewModel
更新FragmentViewModel
中的定时器值
究其原因,是ViewModel
在活动娱乐后保存了数据。