首页 > 解决方案 > 当我在我的 android 应用程序中使用底部导航导航到不同的片段时,如何保持计时器运行?

问题描述

当我使用底部导航进行导航时,片段被破坏并且计时器重置为 00:00。我用过天文钟。我尝试了 retainInstance=true但它只在屏幕旋转时才有帮助。

MainActivity.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
}

标签: androidkotlinandroid-fragmentskotlin-android-extensions

解决方案


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

将计时器值保存在您的FragmentViewModel以及何时fragment将被销毁更新ActivityViewModelActivity 中的计时器值。

同样,in onCreate()of fragmentupdate the timer value in FragmentViewModelfromActivityViewModel

原因是ViewModel在活动重新创建后保留数据。


推荐阅读