400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

JetPack中的LiveData+ViewModel使用

JetPack中的LiveData+ViewModel使用

JetPack中的LiveData+ViewModel使用

创新互联公司"三网合一"的企业建站思路。企业可建设拥有电脑版、微信版、手机版的企业网站。实现跨屏营销,产品发布一步更新,电脑网络+移动网络一网打尽,满足企业的营销需求!创新互联公司具备承接各种类型的成都网站设计、做网站项目的能力。经过10多年的努力的开拓,为不同行业的企事业单位提供了优质的服务,并获得了客户的一致好评。

LiveData

在底层数据库更改时通知视图

ViewModel

以注重生命周期的方式管理界面相关的数据

JetPack中的LiveData+ViewModel使用

以上为viewmodel的生命周期,它会自动监听activity的生命周期。它只有在activcity完全被摧毁的时候才会调用onCleared(),你可以在这边释放你需要释放的问题。

    class SeekBarModel : ViewModel() {
    //继承ViewModel
    val _sBar = MutableLiveData()

    val sBar: MutableLiveData
        get() = _sBar

    var progress: Int? = null
        get() = _sBar?.value?.progress

    var observable: Subscription? = null
        get() = _sBar?.value?.observable

    override fun onCleared() {
        super.onCleared()
        Log.d("SeekBarModel", "ViewModel-->正在摧毁")
        observable?.unsubscribe()
    }
}

class BarI(progress: Int, observable: Subscription?) {
    var progress: Int? = null
    var observable: Subscription? = null

    init {
        this.progress = progress
        this.observable = observable
    }

}

class OriginLiveDataActivity : AppCompatActivity() {
    private lateinit var sekBarModel: SeekBarModel
    var observable: Subscription? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_origin_live_data)
        sekBarModel = ViewModelProviders.of(this).get(SeekBarModel::class.java)
        sekBarModel.sBar.observe(this, Observer { data ->
            bar_life.progress = if (data == null) 0 else data.progress!!
            btn_life.text = "当前进度" + bar_life.progress
        })
        start()
        btn_start.setOnClickListener { view ->
            finish()
        }
    }

//一秒加1,在bar上显示进度条
    private fun start() {
        if (sekBarModel.observable == null)
            observable = Observable
                    .interval(1000, TimeUnit.MILLISECONDS)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe {
                        bar_life.progress += 1
                        sekBarModel.sBar.postValue(BarI(bar_life.progress, observable!!))
                        if (bar_life.progress == 100)
                            sekBarModel.observable?.unsubscribe()
                    }
    }

}

文章题目:JetPack中的LiveData+ViewModel使用
文章URL:http://www.bluegullmedia.com/article/pssjsc.html

其他资讯

让你的专属顾问为你服务

0.0479s