亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JetPack中的LiveData+ViewModel使用

發布時間:2020-05-30 21:07:11 來源:網絡 閱讀:1403 作者:熊西西77 欄目:移動開發

JetPack中的LiveData+ViewModel使用

JetPack中的LiveData+ViewModel使用

  • 先闡述一下JetPack:

    JepPack是谷歌推出的Android軟件組件集合,翻譯出來就是噴氣背包,
    意思是用上這個框架,谷歌就可以帶你飛。
    它幫助您遵循最佳做法、讓您擺脫編寫樣板代碼的工作并簡化復雜任務,以便您將精力集中放在所需的代碼上。
    

    JetPck主要分為四個部分

    1:基礎
    AppCompat,Android KTX,Multidex,Test
    2:架構
    Data Binding,LifeCycles,LiveData,ViewModel...
    3:行為
    Download Manager,Media,Notification,Shareing...
    4:UI
    Animation,Transitions,Auto,TV,Emoji...  

    這四個部分都十分優秀,這里我選擇LiveData和ViewModel來給大家做案例分析,
    能夠達到屏幕旋轉自動記住旋轉前的數據狀態實時自動同步

LiveData

在底層數據庫更改時通知視圖

ViewModel

以注重生命周期的方式管理界面相關的數據

JetPack中的LiveData+ViewModel使用

以上為viewmodel的生命周期,它會自動監聽activity的生命周期。它只有在activcity完全被摧毀的時候才會調用onCleared(),你可以在這邊釋放你需要釋放的問題。

    class SeekBarModel : ViewModel() {
    //繼承ViewModel
    val _sBar = MutableLiveData<BarI>()

    val sBar: MutableLiveData<BarI>
        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()
                    }
    }

}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陇川县| 门头沟区| 溧水县| 富平县| 沈丘县| 安仁县| 卢龙县| 湛江市| 马公市| 河南省| 大埔区| 福州市| 安宁市| 黎城县| 太原市| 五台县| 甘南县| 阜新市| 新乡县| 肥西县| 项城市| 宝兴县| 凤凰县| 昌邑市| 汝阳县| 双鸭山市| 北票市| 兴海县| 仲巴县| 揭西县| 盐边县| 鄄城县| 崇信县| 芦溪县| 沙河市| 百色市| 辽阳县| 贞丰县| 获嘉县| 绥阳县| 巩留县|