美文网首页
MVVM+jetpack

MVVM+jetpack

作者: Android刘东 | 来源:发表于2020-05-15 10:39 被阅读0次

1.环境

androidx
dataBinding {
        enabled true
    }

1.JetPackViewModel

package myjetpack
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MutableLiveData
import java.util.*

class JetPackViewModel(application: Application) : AndroidViewModel(application) {
    var mMutableLiveData: MutableLiveData<String>? = null

    init {
        mMutableLiveData = MutableLiveData()
        mMutableLiveData?.value = getString()
    }

    private fun getString() = Random().nextInt().toString()

    private fun setText() {
        mMutableLiveData?.value = getString()
    }

    fun onClick() {
        setText()
    }
}

2.activity_jetpack.xml

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="mViewModel"
            type="myjetpack.JetPackViewModel" />

    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="66dp"
            android:text="@{mViewModel.mMutableLiveData}" />


        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{()->mViewModel.onClick()}"
            android:text="Button" />

    </LinearLayout>
</layout>

3.JetPackActivity.java

package myjetpack

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import com.zhisheng.test.R
import com.zhisheng.test.databinding.ActivityJetpackBinding

class JetPackActivity : AppCompatActivity() {
    var mJetPackViewModel: JetPackViewModel? = null
    var mActivityJetpackBinding: ActivityJetpackBinding? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
//        mJetPackViewModel = ViewModelProvider(this,ViewModelProvider.AndroidViewModelFactory(application)).get(JetPackViewModel::class.java)
        mJetPackViewModel = JetPackViewModel(application)
        mActivityJetpackBinding = DataBindingUtil.setContentView(this, R.layout.activity_jetpack)
        mActivityJetpackBinding?.mViewModel = mJetPackViewModel
        mActivityJetpackBinding?.lifecycleOwner = this


    }

}

布局文件

databinding是用layout标签,将数据data和原本的layout包起来,编译时会拆分成2个,以xxx.xml为例:
build/intermediates/data_binding_layout_info_type_merge/debug/mergeDebugResources/out/xxx-layout.xml
incremental/mergeDebugResources/stripped.dir/layout/xxx.xml

dataBinding原理

相关文章

网友评论

      本文标题:MVVM+jetpack

      本文链接:https://www.haomeiwen.com/subject/dwgqohtx.html