记录Android jetpack MVVM使用DataBinding 表达式多条件判断&&检查验证EditText表单数据

在使用MVVM模式来开发应用时,我们在布局文件中有可能使用到DataBinding 。

例如在登录界面里,我们通常都是要检验输入的用户名和密码不能为空才可以进行登录。

在这种场景下,可以直接可以在布局文件中使用Databinding直接对Edittext的数据进行检查,若其中有一个信息为空,则登录按钮禁用,就可以省去在Activity写很多的检查代码。

 

1.  如何获取所有Edittext 输入的文本信息

    EditText通过双向数据绑定 @={} ,把用户输入的信息分别存放到两个临时变量里 。其他控件则可以取出EditText的值。

<data>

     <!-- ViewModel 层-->  
     <variable
          name="loginModel"
          type="com.zzh.haohm.ui.login.LoginViewModel" />


     <!-- 临时变量,记录EditText输入的值-->
     <variable
          name="username"
          type="String" />

     <variable
          name="password"
          type="String" />

</data>
 <androidx.appcompat.widget.AppCompatEditText
                android:id="@+id/et_userName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"                
                android:singleLine="true"
                android:text="@={username}"  />


 <androidx.appcompat.widget.AppCompatEditText
                android:id="@+id/et_psw"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:singleLine="true"
                android:text="@={password}" />

 

2. Databinding表达式判断EditText的数据是否为空

先知道Databinding条件判断语法如下:

 <!--TextView-->
android:text='@{username==null?"null":username}'

上面意思是,TextView如果表达式username为null时,则显示“null”, 不为空显示username的值。也可以通过Databinding的空判断运算符 ‘??’  简写为这样

android:text='@{username??"null"}'  

 有点类似于Kotlin 的 ?: 运算符

 

 variable中的临时变量username,password默认值都为null  ,但如果先输入了一些数据然后全部删除了,则临时变量的值为空字符串。所以检查username,password不能直接判空,而是使用TextUtils这个Java工具类进行判断,而且要同时判断两个临时变量的值。但问题Databinding并不支持直接写与 && 这样的运算符,所以我们也可以用三元表达式实现

 


<data>

     <!--使用Java某些类都要通过import导入才能正常使用-->
     <import type="android.text.TextUtils" alias="textUtlis" />

     .....

</data>
 <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/bt_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:enabled="@{!textUtlis.isEmpty(username)?!textUtlis.isEmpty(password)?true:false:false}"
            android:onClick='@{v->loginModel.login(username ?? "",password ?? "",v) }'
            android:text="登陆" />

 

登陆按钮中,enabled属性设置了 

android:enabled="@{!textUtlis.isEmpty(username)?!textUtlis.isEmpty(password)?true:false:false}"

首先用三目运算符判断username,username不为空时,继续用三目运算符判断password 这样嵌套判断,从而实现多个条件判断。上面等同于  ( !TextUtlis.isEmpty(username) && !TextUtlis.isEmpty(password))  这样的意思

 

3.  Databinding表达式使用 && 进行多条件判断

我们都希望可以在databinding layout表达式中直接使用&& 逻辑判断,但遗憾会报错!这里可以使用&的转义字符 &amp; 替代,则上面的用户名密码判空操作可以直接写成

android:enabled="@{!TextUtlis.isEmpty(username) &amp; &amp;  !TextUtlis.isEmpty(password)}"

 

最后经测试,Databinding判断或逻辑表达式中, 不需要转义的有 > ,  || , == , != ;需要转义的  < ,&& 。关于转义字符可以参考html转义字符。这里常用的参考:

字符转义字符
>&gt;
<&lt;
&&amp;
"&quot;

 

Android Jetpack是一组用于Android应用程序开发的库集合,旨在帮助开发者简化开发流程、提高生产力和应用性能。它提供了一些常用的组件和工具,可以帮助开发者解决常见的开发问题。 要使用Android Jetpack,您需要在您的项目中添加相关的Jetpack库依赖。您可以通过在项目的build.gradle文件中添加相应的依赖来实现。例如,要使用Navigation组件,您可以添加以下依赖: implementation "androidx.navigation:navigation-fragment-ktx:2.3.5" implementation "androidx.navigation:navigation-ui-ktx:2.3.5" 一旦您添加了所需的依赖,您可以开始使用Jetpack组件了。对于Navigation组件,您可以使用Navigation图形化界面来创建和管理应用程序中的导航结构,并使用NavController来处理导航操作。 另外,为了更好地理解和学习Android Jetpack,您可以借助官方文档和示例代码来深入学习。官方文档提供了详细的介绍和用法示例,而示例代码可以帮助您更好地理解如何在实际项目中应用Jetpack组件。 总结起来,要使用Android Jetpack,您需要添加相关的库依赖,并根据具体的组件使用文档进行配置和使用。通过深入学习官方文档和示例代码,您可以更好地理解和掌握Jetpack使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android Jetpack架构开发,从入门到实战,看这一篇就够了](https://blog.csdn.net/Eqiqi/article/details/127534594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Android JetPack学习](https://blog.csdn.net/weixin_39069034/article/details/100170739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值