[英]How can I use WearableActivity with LiveData and ViewModel
[英]How can i keep livedata running in viewmodel even fragment is destroyed?
這里我有 2 個 ui 頁面:Home Fragment 和 Timer Fragment
計時器片段的工作是顯示在 viewModel 中運行的計時器計數器值。 但我的問題是當我回到家片段和 go 再次計時器片段時,計時器會重置並重新開始倒計時。 那么有沒有辦法繼續倒計時,即使我在計時器還剩 30 秒時彈回 Home Fragment Likes 並且我回到 HomeFragment 5 秒然后再次進入 TimerFragment 然后它顯示還剩 25 秒而不是從頭開始計數? 太感謝了
這是我的代碼 TimerViewModel.kt
lateinit var timer : CountDownTimer
var timerData = MutableLiveData<Long>()
fun startTimer(){
timer = object : CountDownTimer(30000,1000){
override fun onTick(millisUntilFinished: Long) {
timerData.value = millisUntilFinished/1000
}
override fun onFinish() {
timerData.value = 1000
}
}
if (timerData.value==null){
timer.start()
}
}
TimerFragment.kt
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewModel = injectViewModel(viewModelFactory)
val binding = FragmentTimerBinding.inflate(inflater, container, false)
viewModel.startTimer()
viewModel.timerData.observe(viewLifecycleOwner, Observer { result ->
binding.timeLeft = result.toString()
})
return binding.root
}
在這里我如何使用導航從 homeFragment 到 TimerFragment 的 go
HomeFragmentDirections.actionHomeToTimerFragment()
it.findNavController().navigate(direction)
我的viewModel注入function
inline fun <reified T : ViewModel> Fragment.injectViewModel(factory:
ViewModelProvider.Factory): T {
return ViewModelProviders.of(this, factory)[T::class.java]
}
使用 getActivity() 方法在片段中初始化 Viewmodel 示例: ViewModelProvider(requireActivity())[ViemodelName::class.java]
通過這種方式,視圖模型實例將綁定到活動生命周期,並且只有在活動被銷毀時才會被清除,即使您的片段被銷毀,您的計時器實例也不會被銷毀。如果您有任何困惑,請告訴我。
您的ViewModelStoreOwner
應該是 Fragment 的父活動,以便 ViewModel 在 Fragment 創建和銷毀之間持續存在。
在您的injectViewModel
function 中執行以下操作:
return ViewModelProvider(requireActivity(), viewModelFactory).(TimerViewModel::class.java)
使用這種方法,您的 ViewModel 將綁定到 Activity 的生命周期,並且只有在您的 Activity 被銷毀后才會被銷毀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.