Android需求之RxJava2實現表單校驗(註冊登入)
一. 預覽效果
二. 開發需求
使用者註冊登入等表單校驗場景下,只有賬號和密碼內容都不為空的情況下,按鈕才可點選並實現按鈕背景變化。
三. 實現
1. 依賴
// rxbinding3 內部已新增rxjava依賴
implementation "com.jakewharton.rxbinding3:rxbinding:3.0.0"
2. Rxjava操作符之combineLatest
combineLatest 操作符用來將多個Observable發射的資料組裝起來然後在發射. 通過Func類來組裝多個Observable發射的資料, 等到最後一個Observable發射資料了, 然後把所有發射的資料交給Fun進行組合, 然後把組合後的資料發射出去.
3. 具體實現
話不多說,直接上程式碼:
kotlin :
// 1.繼承TextWatcher
class EditTextMonitor(private val mPublishSubject: PublishSubject<String>) : TextWatcher {
override fun beforeTextChanged(
s: CharSequence,
start: Int,
count: Int,
after: Int
) {}
override fun onTextChanged(
s: CharSequence,
start: Int,
before: Int,
count: Int
) {}
override fun afterTextChanged(s: Editable) {
mPublishSubject.onNext(s.toString())
}
}
// 處理登陸按鈕是否可點選
val mAccountSubject = PublishSubject.create<String>()
val mPasswordSubject = PublishSubject.create<String>()
// etAccount etPwd 賬號和密碼輸入框
etAccount.addTextChangedListener(EditTextMonitor(mAccountSubject))
etPwd.addTextChangedListener(EditTextMonitor(mPasswordSubject))
Observable.combineLatest(mAccountSubject, mPasswordSubject,
BiFunction { name: String, password: String ->
val nameLen = name.length
val passwordLen = password.length
nameLen > 0 && passwordLen > 0
}
).subscribe { clickFlag: Boolean ->
// 滿足以上nameLen > 0 && passwordLen > 0後
if (clickFlag) {
// btnLogin 登入按鈕
btnLogin.apply {
isEnabled = true
setBackgroundResource(R.color.white)
setTextColor(Color.BLACK)
}
// 不滿足:
} else {
btnLogin.apply {
isEnabled = false
setBackgroundResource(R.color.white_cc)
setTextColor(Color.WHITE)
}
}
}
Java:
(Java環境為1.8 支援lamda表示式)
public class EditTextMonitor implements TextWatcher {
private PublishSubject<String> mPublishSubject;
public EditTextMonitor(PublishSubject<String> publishSubject) {
mPublishSubject = publishSubject;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
mPublishSubject.onNext(s.toString());
}
}
// 處理登陸按鈕是否可點選
PublishSubject<String> mAccountSubject = PublishSubject.create();
PublishSubject<String> mPasswordSubject = PublishSubject.create();
edLoginAccount.addTextChangedListener(new EditTextMonitor(mAccountSubject));
edLoginPwd.addTextChangedListener(new EditTextMonitor(mPasswordSubject));
Observable.combineLatest(mAccountSubject, mPasswordSubject, (name, password) -> {
int nameLen = name.length();
int passwordLen = password.length();
return nameLen > 0 && passwordLen > 0;
}).subscribe(clickFlag -> {
if (clickFlag) {
btnLogin.setEnabled(true);
} else {
btnLogin.setEnabled(false);
}
});
相關文章
- node+express+mongDB實現簡單登入註冊Express
- 簡單登入註冊實現(Java物件導向複習)Java物件
- js登入與註冊驗證JS
- node+ajax+mysql實現登入註冊MySql
- flutter - 登陸介面&表單校驗Flutter
- HTML基礎實現簡單的註冊和登入頁面HTML
- vue登入註冊,帶token驗證Vue
- express+vue+mongodb+session 實現註冊登入ExpressVueMongoDBSession
- Laravel 實現 passport 使用者註冊登入LaravelPassport
- 直播系統app原始碼,Android studio 實現app登入註冊頁面APP原始碼Android
- 10.註冊和登入功能實現(3)—— 註冊資料寫入資料庫資料庫
- Spartacus 註冊和登入頁面的實現細節
- Python + Tkinter簡單實現註冊登入(連線本地MySQL資料庫)PythonMySql資料庫
- 前後端實現登入token攔截校驗後端
- SpringBoot系列之使用自定義註解校驗使用者是否登入Spring Boot
- 基於以太坊上實現DApp的登入註冊APP
- go-zero學習之註冊登入Go
- 9.Django之登陸註冊驗證登出Django
- jwt加meta元資訊實現登入後校驗JWT
- PbootCMS出現登入失敗,表單提交校驗失敗等情況怎麼辦?boot
- Node.js+Mysql+Vue+ElementUI 實現登入註冊登出功能Node.jsMySqlVueUI
- 成品直播原始碼推薦,登入和註冊兩個頁面的簡單實現原始碼
- 出現“登入失敗,表單提交校驗失敗”,請檢查伺服器環境伺服器
- 使用者註冊資料合法性校驗外掛能否實現
- javaWeb登入註冊頁面JavaWeb
- ASP.NET Core 中簡單Session登入校驗ASP.NETSession
- 原始碼分析 — Activity的清單註冊校驗及動態注入原始碼
- json web token 實踐登入以及校驗碼驗證JSONWeb
- [無心插柳]簡單實現常用的表單校驗函式函式
- 簡單實現登陸註冊gui介面以及打包成exe檔案GUI
- 現在,ChatGPT不註冊登入也能免費用了ChatGPT
- Laravel5.8 入門系列二,快速實現使用者註冊登入功能Laravel
- vue表單校驗方法Vue
- 02-個人部落格筆記-登入註冊介面的實現筆記
- React & Redux 實現註冊登入認證系統(31 個視訊)ReactRedux
- swing 實現使用者登入註冊介面(不使用資料庫)資料庫
- Vue.js實現可配置的登入表單Vue.js
- element-ui自定義表單校驗規則及常用表單校驗UI