gpt4 book ai didi

validation - Android Databinding TextEdit Validation of two or more fields enable button

转载 作者:行者123 更新时间:2023-12-02 13:37:59 25 4
gpt4 key购买 nike

我正在使用 MVVM 和数据绑定(bind)开发我的第一个 Android 应用程序。我正在掌握一些领域,但我正在努力解决这个问题。场景:

我有一个创建帐户向导事件,它使用 Android 导航架构来分页浏览多个请求用户输入的片段。第一个片段/步骤要求用户输入名字和姓氏。我不希望按钮继续下一步以启用,直到在两个字段中都输入了某些内容。我之前启用了基于一个字段验证的按钮,但不是两个。我觉得我错过了一些愚蠢的东西。

这是两个字段都包含数据后我要启用的按钮:

<Button
android:id="@+id/continueToSecondStepButton"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="32dp"
android:background="@drawable/button_transparent_background"
android:onClick="@{() -> viewModel.proceedToNextStep()}"
android:text="@string/step_proceed"
android:enabled="@{safeUnbox(viewModel.firstNamesValid) &amp;&amp; safeUnbox(viewModel.lastNamesValid)}"
android:textAllCaps="false"
android:textColor="@{safeUnbox(viewModel.firstNamesValid) &amp;&amp; safeUnbox(viewModel.lastNamesValid) ? @colorStateList/white : @colorStateList/transparent_white}"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/subtext" />

这里主要关注的是:
 android:enabled="@{safeUnbox(viewModel.firstNamesValid) &amp;&amp; safeUnbox(viewModel.lastNamesValid)}"
android:textColor="@{safeUnbox(viewModel.firstNamesValid) &amp;&amp; safeUnbox(viewModel.lastNamesValid) ? @colorStateList/white : @colorStateList/transparent_white}"

我有两个转换来监听名字和姓氏字段的关键变化并执行验证方法:
    firstNamesValid = Transformations.switchMap(firstName) { firstName -> isNamesValid() }

lastNamesValid = Transformations.switchMap(lastName) { lastName -> isNamesValid() }

现在,只是一个简单的方法来检查两个字段中是否有数据:
 private fun isNamesValid(): LiveData<Boolean> {
var namesValid = false

if (!firstName.value.isNullOrEmpty() && !lastName.value.isNullOrEmpty()) {
namesValid = true
}

val mediatorLiveData: MediatorLiveData<Boolean> = MediatorLiveData()
mediatorLiveData.value = namesValid
return mediatorLiveData
}

它“有点”有效,但效果不佳。您可以基于使用数据绑定(bind)验证两个字段来启用按钮吗?我觉得有一种更简单的方法可以做到这一点。此设置发生的情况是,您填写名字和姓氏,但没有任何 react ,但如果您随后导航回名字并输入另一个字符,它会起作用并启用按钮。我认为这是由于我的代码中的一些逻辑错误造成的。感谢您的关注。

最佳答案

我最终弄清楚了。打字帮助我找到了问题,我将分享我为他人所做的事情。我在引用 isNamesValid 函数的代码中出现逻辑错误。

我做了以下更改:

isNamesValid 现在采用字符串参数并检查特定字符串,而不是硬编码检查名字和姓氏值

private fun isNameValid(name: String?): LiveData<Boolean> {
var namesValid = false

if (!name.isNullOrEmpty()) {
namesValid = true
}

val mediatorLiveData: MediatorLiveData<Boolean> = MediatorLiveData()
mediatorLiveData.value = namesValid
return mediatorLiveData
}

更新了转换以调用传递要检查的名称的方法。
    firstNamesValid = Transformations.switchMap(firstName) { firstName -> isNameValid(firstName) }

lastNamesValid = Transformations.switchMap(lastName) { lastName -> isNameValid(lastName) }

关于validation - Android Databinding TextEdit Validation of two or more fields enable button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51707927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com