Kotlin下的MVVM

一:配置DataBinding

    主模块的build.gradle

    

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
android {
    ...
    dataBinding {
        enabled = true
    }
    kapt {
        generateStubs = true
    }
}
dependencies {
    ...
    kapt "com.android.databinding:compiler:3.1.1"
}

    新建一个Activity名叫UserActivity,一个layout文件叫做activity_user,一个Bean文件叫做User

    layout文件如下

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="user"
            type="com.test.bean.User" />
    </data>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.TextInputLayout
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="30dp"
            android:layout_marginTop="50dp">

            <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="hint" />
        </android.support.design.widget.TextInputLayout>

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="30dp"
            android:layout_marginTop="100dp"
            android:text="@{String.valueOf(user.name)}" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/textView"
            android:layout_marginStart="30dp"
            android:layout_marginTop="100dp"
            android:text="@{Int.valueOf(user.age)}"/>

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/textView2"
            android:layout_marginStart="30dp"
            android:layout_marginTop="100dp"
            android:text="@{String.valueOf(user.entnicity)}"/>
    </RelativeLayout>
</layout>

    bean文件如下

package com.test.bean

class User {
    var name: String? = null
    var age: Int? = null
    var ethnicity: String? = null


}

    Activity如下

package com.test.activity

import android.app.Activity
import android.databinding.DataBindingUtil
import android.os.Bundle
import com.choice.choiceplayer.R
import com.choice.choiceplayer.bean.User
import com.choice.choiceplayer.databinding.LayoutUserInfoBinding

class UserActivity : Activity() {
    var layoutUserInfo:LayoutUserInfoBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        layoutUserInfo=DataBindingUtil.setContentView(this@UserActivity, R.layout.layout_user_info)
        val user=User()
        user.name="Erone Choi"
        user.age=26
        user.ethnicity="朝鲜族"
        layoutUserInfo.setVariable(0,user)
    }
}

需要注意的点:

    xml里的bean的属性名要写正确,不然就会报kaptDebugKotlin或could not find accessor...等错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin中使用MVVM模式请求数据通常涉及以下几个步骤: 1. 创建数据模型(Model):定义数据的结构和属性。可以使用Kotlin的数据类(data class)来简化模型的创建。 ```kotlin data class User(val id: String, val name: String, val email: String) ``` 2. 创建视图模型(ViewModel):负责处理数据的获取和变换逻辑,并将数据暴露给视图层。视图模型应该是与界面无关的,不包含任何与界面相关的代码。 ```kotlin class UserViewModel : ViewModel() { private val userRepository = UserRepository() private val _user = MutableLiveData<User>() val user: LiveData<User> get() = _user fun getUser(userId: String) { userRepository.getUser(userId) { user -> _user.postValue(user) } } } ``` 3. 创建仓库(Repository):负责从数据源(如网络、数据库等)获取数据。仓库可以使用异步方式获取数据,如使用协程、RxJava等。 ```kotlin class UserRepository { fun getUser(userId: String, callback: (User) -> Unit) { // 发起网络请求或数据库查询等操作获取数据 // 在回调中将获取到的数据传递给调用方 // callback(user) } } ``` 4. 创建视图(View):展示数据和处理用户交互。视图通常是Activity、Fragment或View等。 ```kotlin class MainActivity : AppCompatActivity() { private val userViewModel: UserViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) userViewModel.user.observe(this, { user -> // 更新UI显示数据 }) // 请求数据 userViewModel.getUser("user_id") } } ``` 这样,当调用`getUser`方法时,视图模型会通过仓库获取数据,并将数据更新到`user`LiveData中。视图观察`user`LiveData,一旦数据发生变化,就会触发UI的更新。 请注意,上述代码只是一个简单的示例,实际使用中可能需要根据具体情况进行适当调整。同时,还可以使用各种第三方库来简化开发,如Retrofit进行网络请求,Room进行数据库操作等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值