Не удается увидеть Таймер обратного отсчета Android

#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. @Люси у меня вопрос в том, почему вы отменяете свой таймер вручную ?