RxTextView实现对多个EditText/TextView进行监听(其他控件自行设定逻辑)
Posted 若兰明月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxTextView实现对多个EditText/TextView进行监听(其他控件自行设定逻辑)相关的知识,希望对你有一定的参考价值。
当业务比较复杂,需要对多个控件进行监听的时候,比如:
业务一:我们注册的时候(手机号、邮箱、密码、确认密码)
业务二:比如填写某些地址的时候(地址、手机号、验证码、备注等)
如果我们每一个控件都需要一个监听,然后配合这些监听去实现最后的登录/添加按钮的背景变换,那么这个逻辑真的是可以折磨死人的。接下来介绍一个RxTextView(既然使用了RxJava,那么他的特性我们也要利用一下了呀),废话不多说,直接上代码
//创建输入框的监听
Observable<CharSequence> etAmoutMoney = RxTextView.textChanges(mEtAmountMoney);
//创建输入框的监听
Observable<CharSequence> tvAddress = RxTextView.textChanges(mTvAddress);
//使用combineLatest操作符,传入我们创建的那些监听 可以多个
Observable.combineLatest(etAmoutMoney, tvAddress, new Func2<CharSequence, CharSequence, Boolean>()
@Override
public Boolean call(CharSequence charSequence, CharSequence charSequence2)
//在这个地方返回的逻辑就是那些输入框的逻辑
return !TextUtils.isEmpty(mEtAmountMoney.getText().toString().trim()) && !TextUtils.isEmpty(mTvAddress.getText().toString().trim());
).subscribe(new Action1<Boolean>()
@Override
public void call(Boolean aBoolean)
//在这个地方可以实现是否满足过滤逻辑
if (aBoolean)
//如果满足了过滤逻辑 设置可以点击并且设置背景
mTvWithdrawMoney.setBackground(ContextCompat.getDrawable(WithdrawCoinActivity.this, R.drawable.currency_coin_selected_border_bg));
else
//否则就设置背景不可点击
mTvWithdrawMoney.setBackground(ContextCompat.getDrawable(WithdrawCoinActivity.this, R.drawable.currency_coin_unselected_border_bg));
);
以上是关于RxTextView实现对多个EditText/TextView进行监听(其他控件自行设定逻辑)的主要内容,如果未能解决你的问题,请参考以下文章
java RxTextView for Search Textbox
使用最新的 com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2 库时未找到 RxTextView 和其他小部件