#android #kotlin #countdown #countdowntimer
#Android #котлин #обратный отсчет #обратный отсчет времени
Вопрос:
Он работает без ошибок, но не работает. Все журналы распечатаны. Я хочу, чтобы таймер отображался в текстовом представлении, которое я создал в XML, но он ничего не показывает.
Это фрагмент файла
class TotpFragment: Fragment() { private lateinit var binding : FragmentTotpBinding private lateinit var viewModel : TotpViewModel private lateinit var mView : View private lateinit var mContext: MainActivity override fun onAttach(context: Context) { super.onAttach(context) mContext = context as MainActivity } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = DataBindingUtil.inflate(inflater, R.layout.fragment_totp, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) mView = view viewModel = ViewModelProvider(this,).get(TotpViewModel::class.java) binding.lifecycleOwner = viewLifecycleOwner Timber.d("3333") viewModel.stopTimer() Timber.d("44444") }
}
Это мой файл ViewModel
class TotpViewModel: ViewModel() { private var _time = MutableLiveDatalt;Stringgt;() val time : LiveDatalt;Stringgt; get() = _time private var mTimer = Timer() init { startTimer() } private fun startTimer() { Timber.d("1111") var remainTime : Int = 1800 mTimer = timer(period = 1000) { Timber.d("222222") remainTime-- _time.postValue("Time : " (remainTime / 60.0).toInt().toString().padStart(2,'0') ":" (remainTime % 60).toInt().toString().padStart(2,'0')) if(remainTime == 0) stopTimer() } } fun stopTimer() { mTimer.cancel() } fun onBackPress() { }
}
Я хочу, чтобы время отображалось в текстовом представлении в этом XML
lt;androidx.appcompat.widget.AppCompatTextView android:id="@ id/text_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="20dp" android:paddingTop="10dp" android:paddingBottom="10dp" android:text="@{totpviewModel.time}" android:textColor="@android:color/white" android:textSize="@dimen/text_size_content" app:layout_constraintStart_toEndOf="@ id/img_timer" app:layout_constraintTop_toTopOf="parent" /gt;
Любая помощь будет очень признательна. Спасибо
Комментарии:
1. Похоже, ты промахнулся
binding.viewModel = viewModel
2. Мне все еще это нужно, хотя я объявляю «ViewModel = ViewModelProvider(это,). get(TotpViewModel::class.java)»? Это происходит из-за ошибки, когда я написал эту строку…
3. Вам также необходимо отправить эту модель представления в xml.
bidning.totpviewModel = viewModel
Ответ №1:
Это потому viewModel.stopTimer()
, что вы вызываете onViewCreated
таймер отмены и останавливаете его при отображении вида
Комментарии:
1. Куда мне следует позвонить? Было несколько попыток изменить, как это назвать, но я не смог этого сделать
2. @Люси у меня вопрос в том, почему вы отменяете свой таймер вручную ?