【发布时间】:2021-02-18 13:29:41
【问题描述】:
我实现了“记住我”功能,我想通过 SharedPreferences 将正确输入的信息继续存储到我的 AuthorizationActivity。
我通过 DataBinding 在我的视图(UI)上传输数据。因此,我通过 ViewModel 中的双向绑定获取值电子邮件和密码(editTexs),但我无法将 checkBox true/false 值作为 ViewModel 中的变量“onChecked”。
我该如何解决这样的问题?
XML
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginTop="36.7dp"
android:layout_marginRight="32dp"
android:background="@drawable/blue_border_rounded_cornwe">
<!-- INPUT -->
<EditText
android:id="@+id/login_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/username_icon"
android:background="@android:color/transparent"
android:fontFamily="@font/poppins_regular"
android:hint="Логин"
android:inputType="textEmailAddress"
android:maxLines="1"
android:paddingLeft="17dp"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:paddingRight="17dp"
android:text="@={AuthViewModel.email}"
android:textCursorDrawable="@drawable/cursor_color"
android:textSize="12sp" />
<!-- ICON -->
<ImageView
android:id="@+id/username_icon"
android:layout_width="16.7dp"
android:layout_height="12.3dp"
android:layout_centerVertical="true"
android:layout_marginLeft="17dp"
android:src="@drawable/sr_email" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginTop="12.7dp"
android:layout_marginRight="32dp"
android:background="@drawable/blue_border_rounded_cornwe">
<!-- INPUT -->
<EditText
android:id="@+id/password_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/icon"
android:background="@android:color/transparent"
android:fontFamily="@font/poppins_regular"
android:hint="Пароль"
android:inputType="textPassword"
android:maxLength="10"
android:maxLines="1"
android:paddingLeft="17dp"
android:paddingRight="17dp"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:text="@={AuthViewModel.password}"
android:textCursorDrawable="@drawable/cursor_color"
android:textSize="12sp" />
<!-- ICON -->
<ImageView
android:id="@+id/icon"
android:layout_width="16.7dp"
android:layout_height="12.3dp"
android:layout_centerVertical="true"
android:layout_marginLeft="17dp"
android:src="@drawable/sr_password" />
</RelativeLayout>
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="32dp"
android:layout_marginTop="8.7dp"
android:buttonTint="@color/sr_theme"
android:onClick="@{AuthViewModel::onCheckedClick}"
android:checked="@={AuthViewModel.onChecked}"
android:fontFamily="@font/poppins_regular"
android:text="Запомнить" />
<TextView
android:id="@+id/buttoned"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="32dp"
android:layout_marginTop="8.7dp"
android:layout_marginRight="32dp"
android:background="@drawable/blue_fill__rounded_color"
android:fontFamily="@font/poppins_medium"
android:gravity="center"
android:onClick="@{AuthViewModel::onLoginButtonClicked}"
android:paddingTop="14dp"
android:paddingBottom="14dp"
android:text="Войти"
android:textColor="#ffffff"
android:textSize="12sp" />
一大块 ViewModel 文件,里面有一个函数
class AuthViewModel(
private val repository: UserRepository
) : ViewModel() {
var email: String? = null
var password: String? = null
var authListener: AuthListener? = null
var onChecked: Boolean? = false
fun rememberMe (){
var onChecked: Boolean = repository.getBoolean()
if(onChecked == true){
//authListener?.onActivate(repository.getInfo())
var (login, pswrd, checked) = repository.getInfo()
email = login
password = pswrd
onChecked = checked
repository.saveAuth(email!!, password!!, onChecked!!)
authIn()
} else {
authListener?.onFailure("Введите ваши данные")
}
}
【问题讨论】:
-
你应该从
BaseObservable扩展你的视图模型,这样你就可以在你的视图模型中使用数据绑定