android - 当我在我的 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
}
解决方案
我建议你使用 ViewModel 方法,即
ActivityViewModel
和
FragmentViewModel
将计时器值保存在您的FragmentViewModel
以及何时fragment
将被销毁更新ActivityViewModel
Activity 中的计时器值。
同样,in onCreate()
of fragment
update the timer value in FragmentViewModel
fromActivityViewModel
原因是ViewModel
在活动重新创建后保留数据。
推荐阅读
- python - 为什么我们使用 plt.plot(x, lin_reg2.predict(poly_reg.fit_transform(x)) ) 而不是使用 plt.plot(x_poly, lin_reg2.predict(x_poly) )
- r - R Stargazer 将 p 值放入一行
- javascript - 错误 document.registerElement is not a function console chrome in Debugging extensions Adobe CC application HTML
- python - 熊猫转换数据时间
- flutter - 由于图像名称中的空格,无法加载资产图像
- aqueduct - 在播种类型文档中苦苦挣扎。有一个问题。原因:无法推断值的类型
- java - Java GSON Json 部分解析
- testing - 在 Testcafe 中使用 Request Hooks 进行模拟时如何传递请求 url 的查询参数?
- c# - 如何使用 C# VS2019 更新 TFS 2019 中的查询
- c# - 如何使用 eval() 在标签文本的 mysql 表列中显示实体的计数