近两年大火的rxjava有无数大神研究,其中就有一篇是rxjava联合判断。但是我认为rxjava联合判断毫无用处。首先,贴出代码。
name = (EditText) findViewById(R.id.name); age = (EditText) findViewById(R.id.age); job = (EditText) findViewById(R.id.job); list = (Button) findViewById(R.id.list); /* * 步骤2:为每个EditText设置被观察者,用于发送监听事件 * 说明: * 1. 此处采用了RxBinding,需要引入依赖:compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0' * 2. 传入EditText控件,点击任1个EditText撰写时,都会发送数据事件 = Function3()的返回值(下面会详细说明) * 3. 采用skip(1)原因:跳过 一开始EditText无任何输入时的空值 **/ Observable<CharSequence> nameObservable = RxTextView.textChanges(name).skip(1); Observable<CharSequence> ageObservable = RxTextView.textChanges(age).skip(1); Observable<CharSequence> jobObservable = RxTextView.textChanges(job).skip(1); /* * 步骤3:通过combineLatest()合并事件 & 联合判断 **/ Observable.combineLatest(nameObservable,ageObservable,jobObservable,new Function3<CharSequence, CharSequence, CharSequence,Boolean>() { @Override public Boolean apply(@NonNull CharSequence charSequence, @NonNull CharSequence charSequence2, @NonNull CharSequence charSequence3) throws Exception { /* * 步骤4:规定表单信息输入不能为空 **/ // 1. 姓名信息 boolean isUserNameValid = !TextUtils.isEmpty(name.getText()) ; // 除了设置为空,也可设置长度限制 // boolean isUserNameValid = !TextUtils.isEmpty(name.getText()) && (name.getText().toString().length() > 2 && name.getText().toString().length() < 9); // 2. 年龄信息 boolean isUserAgeValid = !TextUtils.isEmpty(age.getText()); // 3. 职业信息 boolean isUserJobValid = !TextUtils.isEmpty(job.getText()) ; /* * 步骤5:返回信息 = 联合判断,即3个信息同时已填写,"提交按钮"才可点击 **/ return isUserNameValid && isUserAgeValid && isUserJobValid; } }).subscribe(new Consumer<Boolean>() { @Override public void accept(Boolean s) throws Exception { /* * 步骤6:返回结果 & 设置按钮可点击样式 **/ Log.e(TAG, "提交按钮是否可点击: "+s); list.setEnabled(s); } });
在这里,大家要关注的是
Function3这里接口。里面传的是
CharSequence, CharSequence, CharSequence,Boolean四个参数。这就意味着我们有且只有对三个edittext做出判断,因为第一和下面的
public Boolean apply(@NonNull CharSequence charSequence, @NonNull CharSequence charSequence2, @NonNull CharSequence charSequence3) throws Exception
严格对应。第二,打开rxjava的apply函数,用static方法定义了四个参数,,其中层层嵌套。建议高级以
下Android不要使用,尽量使用if,else判断。可能是我比较菜,就写到这里