kotlin 编写的android mvvm demo 简单例子

project gradle

dependencies {
    classpath 'com.android.tools.build:gradle:3.1.2'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

}

module gradle

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
android {
   ....
    dataBinding {
        enabled = true
    }
   ...
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.0.2'
    implementation 'com.google.code.gson:gson:2.6.2'
    implementation 'com.github.bumptech.glide:glide:3.7.0'
    implementation 'com.android.support:recyclerview-v7:27.0.2'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
xml如下

<ImageView
    android:id="@+id/image"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_gravity="center"
    android:maxHeight="200dp"
    android:maxWidth="200dp"
    app:imageUrl="@{viewModel.entityModel.imgUrl}"
    />
然后再activity oncreate方法中:
setMyContentView(R.layout.activity_main)

var model = EntityViewModel();
setVariable(model)
model.getData(this);

接着看viewmodel

var entityModel:ObservableField<EntityModel> =  ObservableField<EntityModel>( EntityModel());
fun getData(context:Context ) {
    //从网络获取数据
    var json = FileUtils.getAssetString(context,"json1.json");
    var gson =  Gson();
    var entityModel = gson.fromJson(json, EntityModel::class.java);
    this.entityModel.set(entityModel);
}
 
 
//此方法是用来加载图片 xml中的ImageView属性 app:imageUrl="@{viewModel.entityModel.imgUrl}"
@BindingAdapter("imageUrl")
@JvmStatic
fun  loadImage( imageView:ImageView,  imgUrl:String?){
    Glide.with(imageView.getContext()).load(imgUrl).into(imageView);
}
也可以拦截 android 控件的原始属性 比如TextView中的 android:text
    只要TextView text设置值之前都要执行以下方法

@BindingAdapter("android:text")
@JvmStatic
fun setText(tv:TextView ,str:String ){
    tv.setText(str)
  Toast.makeText(tv.context,"str:"+str,Toast.LENGTH_LONG).show()
}

model:
 class EntityModel {
     var  content:String?=null ;
     var  inputStr:String?=null;
     var imgUrl:String?=null;
     var imgUrl1 :String?=null ;
     var innerModel:EntitySubModel?=null;

}

很简单的:

具体请看项目源码:[email protected]:137403672/MVVMDemo.git

csdn:https://download.csdn.net/download/wangwei268/10421163



 

猜你喜欢

转载自blog.csdn.net/wangwei268/article/details/80354065