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 和其他小部件

(kotlin)editText.toString().toInt()在android studio中不起作用[关闭]

对多个有序数组,实现归并操作

文本更改时将数字转换为货币格式

为多个条件实现按逻辑排序以对最终结果进行排序的问题