Android Kotlin学习(二)- ViewModel

创建实体类

创建User实体类,可以选择Data类型,类似于java语言中的Bean对象。
在这里插入图片描述

data class User(var name:String,var pwd:String,var rePwd:String)

ViewModel

创建ViewModel时需要使用到继承,Kotlin的继承直接使用:就行:

//注意这里的父类构造函数需要实际调用
class 子类  : 父类  {
	//子类函数体
	override fun 被重写的父类方法名 ( 被重写的父类方法参数 ){
		//要执行的函数内容
	}
}

这里需要继承AndroidViewModel,子类需要在主构造函数中定义需要的变量 , 其中的参数 , 可以直接传递给后面委托调用的主构造函数 :

class LoginViewModel(application: Application) : AndroidViewModel(application) {

}

添加LiveData,在kotlin中,类的每一个属性都会产生一getter,一个setter,这里就不需要再写了

class LoginViewModel(application: Application) : AndroidViewModel(application) {
    var loginLD : MutableLiveData<User> = MutableLiveData<User>();	
}

添加点击事件

open class LoginViewModel() : ViewModel() {
    var TAG = "LoginViewModel";
    var userLd : MutableLiveData<User> = MutableLiveData<User>();

fun onLogin(v:View){
    Log.i(TAG,"login ${userLd.value?.name} ${userLd.value?.pwd}");
}

}
?加在变量之后,系统任何情况都不会抱他的空指针异常。意思就是允许该变量值为null。该变量如果为null时,不会执行该变量后面的逻辑,也不会抛出空指针异常,俗称空安全。如果不为null,会正常执行该变量后面的内容。

修改布局文件

<data>
    <variable
        name="user"
        type="com.kotlin.demo.viewmodel.LoginViewModel" />
</data>
<com.google.android.material.textfield.TextInputEditText
            android:id="@+id/et_name"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@={vm.userLd.name}"></com.google.android.material.textfield.TextInputEditText>

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/et_pwd"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="@={vm.userLd.pwd}"></com.google.android.material.textfield.TextInputEditText>

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btn_login"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:onClick="@{vm.onLogin}"
            android:text="登录" />

Activity配置ViewModel

class LoginActivity : AppCompatActivity() {
    val TAG = "LoginActivity";
    lateinit var binding: ActivityLoginBinding;
    lateinit var mViewModel: LoginViewModel;
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this,R.layout.activity_login);
        //绑定生命周期
        binding.lifecycleOwner = this;
        initVM();
    }

    private fun initVM() {
        mViewModel = ViewModelProvider(this).get(LoginViewModel::class.java);
        //绑定ViewModel
        binding.vm = mViewModel;
        mViewModel.userLd.postValue(User("test","123456","123456890"));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值