Android jetpack liveData 写一个定时器应用

他存在的作用就是viewModel 数据发生变化后 告知 页面中view

参考:2021年最全面的Jetpack系统学习课程,看他就够了,更新中_哔哩哔哩_bilibili

package com.anguomob.jecpack.viewmodel

import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class LiveDateViewModel : ViewModel() {


    private lateinit var currentSecond: MutableLiveData<Int>

    fun getCurrentSecond(): MutableLiveData<Int> {
        if (::currentSecond.isInitialized.not()) {
            currentSecond = MutableLiveData();
            currentSecond.value = 0
        }
        return currentSecond
    }
}

、布局非常简单

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.LiveDataActivity">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

代码 就是通过监听数据变换 从而设置上去

而不是每次变化设置上去

package com.anguomob.jecpack.activity

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.anguomob.jecpack.R
import com.anguomob.jecpack.databinding.ActivityLiveDataBinding
import com.anguomob.jecpack.databinding.ActivityMainBinding
import com.anguomob.jecpack.viewmodel.LiveDateViewModel
import java.util.*

class LiveDataActivity : AppCompatActivity() {
    lateinit var binding: ActivityLiveDataBinding
    lateinit var viewModel: LiveDateViewModel
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityLiveDataBinding.inflate(layoutInflater)
        setContentView(binding.root)
        viewModel =
            ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory(application)).get(
                LiveDateViewModel::class.java
            )

        binding.textView2.text = viewModel.getCurrentSecond().value.toString()

        viewModel.getCurrentSecond().observe(this, { i ->
            binding.textView2.text = viewModel.getCurrentSecond().value.toString()
        })
        startTimer()
    }

    private fun startTimer() {
        //如果定时器开启过,则不再开启
        if (viewModel.getCurrentSecond().value!! > 0) {
            return
        }

        Timer().schedule(object : TimerTask() {
            override fun run() {
                //子线程更新数据使用postValue
                viewModel.getCurrentSecond().postValue(viewModel.getCurrentSecond().value?.plus(1))
            }
        }, 1000, 1000);
    }
}

猜你喜欢

转载自blog.csdn.net/mp624183768/article/details/124853775