Android databingding与jetpack的lifecycle使用与比较

1.开发环境Android studio 3.4.0,kotlin
2.databinding用法
3.jetpack lifecycles的LiveData 和 ViewModel用法
测试效果如下:可以看到在onResume执行之前不会更新视图,在onStop之后也不会更新视图
在这里插入图片描述
①添加依赖

 // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:1.1.0"

②创建一个DevInfoVM继承ViewModel

import android.os.Handler
import android.os.Looper
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.zjhj.maxapp.bean.DevInfo
import com.zjhj.maxapp.http.Urls
import com.zjhj.maxapp.http.base.BaseRequest
import com.zjhj.maxapp.http.base.IBaseCallView
import com.zjhj.maxapp.utils.L
import java.util.*
import java.util.TimerTask


/**
 * ViewModel层绑定绑定view
 *
 */
class DevInfoVM : ViewModel(), IBaseCallView {
    val handler = Handler(Looper.getMainLooper())
    val req: BaseRequest = BaseRequest(this)
    val liveData = MutableLiveData<DevInfo>()

    fun getDev(): LiveData<DevInfo> {
        loadDevInfo()
        return liveData
    }

    fun getData(res : String){
        L.d("$res 加载数据,返回null")
        liveData.postValue(null)
    }

    fun getMoreData() {
        L.d("加载更多,返回数据...")
        liveData.postValue(null)
    }

    private fun loadDevInfo() {//请求设备数据
        L.d("请求数据开始..")
        req.getData(url = Urls.getDevEvInfo, reqType = 111)
    }

    override fun loadStart(msg: String, reqType: Int) {

    }

    override fun loadSuccessData(content: String?, isLoadMore: Boolean, reqType: Int) {
        val info: MutableList<DevInfo>? = req.getResultList(content, DevInfo::class.java)
        if (info != null)
            liveData.postValue(info.get(0))
        Timer().schedule(object : TimerTask(){
            override fun run() {
                L.d("执行延时操作 10秒")
                liveData.postValue(null)
            }
        },10000)
    }

    override fun loadErr(message: String, reqType: Int) {

    }
}

③在Activity中绑定代码块

...
 lateinit var model: DevInfoVM

    override fun setContentView() {
        //获取ViewModel
        model = ViewModelProviders.of(this).get(DevInfoVM::class.java)
        //绑定生命周期
        model.getDev().observe(this, Observer<DevInfo> { devInfo ->
            // update UI1
            L.d("更新视图:" + devInfo?.values?.mainCompany)
            toolBar.title = devInfo?.values?.mainCompany
        })
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolBar)
        model.getData("setContentView");
    }

    override fun onStart() {
        super.onStart()
        L.d("onStart")
        model.getData("onStart")
    }

    override fun onRestart() {
        super.onRestart()
        L.d("onRestart")
    }

    override fun onResume() {
        super.onResume()
        L.d("onResume")
        model.getData("onResume")
    }

    override fun onStop() {
        super.onStop()
        L.d("onStop")
        model.getData("onResume")
    }
...
  1. 比较databingding与jetpack的lifecycle
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值