去androiod develper上看例子 看完后,还是不知道怎么写登录 userName 定义一个liveData 然后 password再定义一个liveData 然后就 懵逼了,再然后就自己写一个例子吧 帮助不熟悉的兄弟快入门。
界面

布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.test.MyLoginActivity">
<EditText
android:hint="请输入用户名"
android:id="@+id/username_my_login"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintVertical_bias="0.3"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintWidth_percent="0.8"
app:layout_constraintHeight_percent="0.09"
android:layout_width="0dp"
android:layout_height="0dp"></EditText>
<EditText
android:hint="请输入密码"
android:id="@+id/password_my_login"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
app:layout_constraintLeft_toLeftOf="@+id/username_my_login"
app:layout_constraintRight_toRightOf="@id/username_my_login"
app:layout_constraintTop_toBottomOf="@+id/username_my_login"
app:layout_constraintWidth_percent="0.8"
app:layout_constraintHeight_percent="0.09"></EditText>
<Button
android:text="登录"
android:id="@+id/btn_login_my_login"
android:layout_marginTop="30dp"
app:layout_constraintLeft_toLeftOf="@id/password_my_login"
app:layout_constraintRight_toRightOf="@+id/password_my_login"
app:layout_constraintTop_toBottomOf="@+id/password_my_login"
app:layout_constraintWidth_percent="0.33"
app:layout_constraintHeight_percent="0.09"
android:layout_width="0dp"
android:layout_height="0dp"></Button>
</androidx.constraintlayout.widget.ConstraintLayout>
页面Activity
package com.www.viewmodeldemo.ui.test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.www.viewmodeldemo.R
import kotlinx.android.synthetic.main.activity_my_login.*
//viewModel提供数据我们需要的是登录功能那么 viewModel只需要告诉我们是否登录成功就ok了
class MyLoginActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my_login)
var viewModel = ViewModelProvider(this, object : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return MyLoginViewModel() as T
}
}).get(MyLoginViewModel::class.java)
viewModel.realLoginStatus.observe(this, Observer { isSuccess->
if(isSuccess){
Toast.makeText(this,"成功了",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"失败了",Toast.LENGTH_SHORT).show();
}
})
//登录按钮
btn_login_my_login.setOnClickListener {
viewModel.login(username_my_login?.text.toString(),password_my_login?.text.toString())
}
}
}
ViewModel
/**
*@time:
*@author yulai
*/
class MyLoginViewModel:ViewModel() {
private val loginStatus = MutableLiveData<Boolean>()
val realLoginStatus = loginStatus
fun login(userName:String,password:String){
//在这里做异步请求 登录接口根据返回的值 给 loginStatus赋值
loginStatus.value = userName=="yulai"&&password=="123456"
}
}
网友评论