使用rxjava1 android(java)搜索过滤器
我有一个列表和搜索过滤器。我已经使用了EditText侦听器和for循环。但是我希望过滤器应该由rxjava处理使用rxjava1 android(java)搜索过滤器,java,android,rx-java,rx-android,Java,Android,Rx Java,Rx Android,我有一个列表和搜索过滤器。我已经使用了EditText侦听器和for循环。但是我希望过滤器应该由rxjava处理 @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { Log.i(TAG, "Search text: " + charSequence); List<AllAttendance> list = new ArrayList<&g
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
Log.i(TAG, "Search text: " + charSequence);
List<AllAttendance> list = new ArrayList<>();
//filter from all List
if (rbtnAll.isChecked())
list = filter(mAttendanceList, charSequence);
else if (rbtnPending.isChecked())
list = filter(mPendingAttendanceList, charSequence);
setAdapterData(list);
rvAttendance.scrollToPosition(0);
}
private List<AllAttendance> filter(List<AllAttendance> mAttendanceList, CharSequence charSequence) {
String text = String.valueOf(charSequence);
text = text.toLowerCase();
List<AllAttendance> filteredList = new ArrayList<>();
for (AllAttendance attendance : mAttendanceList){
if (attendance.getMandalName().toLowerCase().contains(text) || attendance.getSabhaName().toLowerCase().contains(text) || attendance.getSabhaDate().toLowerCase().contains(text))
filteredList.add(attendance);
}
return filteredList;
}
@覆盖
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
Log.i(标签,“搜索文本:”+charSequence);
列表=新的ArrayList();
//从所有列表中筛选
if(rbtnAll.isChecked())
列表=过滤器(mattendacelist,charSequence);
else if(rbtnPending.isChecked())
列表=过滤器(mPendingAttendanceList,字符序列);
setAdapterData(列表);
rVatenance.scrollToPosition(0);
}
私有列表筛选器(列表MattendAcelist、CharSequence CharSequence){
String text=String.valueOf(charSequence);
text=text.toLowerCase();
List filteredList=新建ArrayList();
for(所有出席人数:Mattendacelist){
if(Attention.getMandalName().toLowerCase().contains(text)| | | Attention.getSabhaName().toLowerCase().contains(text)| | | | Attention.getSabhaDate().toLowerCase().contains(text))
filteredList.add(出席人数);
}
返回过滤器列表;
}
这是我使用AndroidRx进行搜索时使用的一段代码
注意:在本例中,我在等待1000毫秒后对每个字符更改进行网络调用
PublishSubject<String> subject = PublishSubject.create();
subject.debounce(1000, TimeUnit.MILLISECONDS)
.filter(new Predicate<String>() {
@Override
public boolean test(@NonNull String s) throws Exception {
return s.length() > 0;
}
})
.switchMap(new Function<String, Observable<SearchViewResponseModel>>() {
@Override
public Observable<SearchViewResponseModel> apply(@NonNull String o) throws Exception {
return api.getSearchResult(PrefsManager.getToken(SearchActivity.this), o, 0, 10);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<SearchViewResponseModel>() {
@Override
public void onNext(@NonNull SearchViewResponseModel s) {
adapter.clear();
for (SearchViewResponseModel.Data model : s.getData())
adapter.add(new SearchViewModel(model.get_id(), model.getThumbnail(), model.getTitle()));
}
@Override
public void onError(@NonNull Throwable e) {
e.printStackTrace();
}
@Override
public void onComplete() {
Log.i("Completed", "");
}
});
searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(final String newText) {
subject.onNext(newText);
return true;
}
});
}
PublishSubject=PublishSubject.create();
主题.去盎司(1000,时间单位.毫秒)
.filter(新谓词(){
@凌驾
公共布尔测试(@NonNull字符串s)引发异常{
返回s.length()>0;
}
})
.switchMap(新函数(){
@凌驾
公共可观察应用(@NonNull String o)引发异常{
返回api.getSearchResult(PrefsManager.getToken(SearchActivity.this),o,0,10);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribowith(新可处置观察员){
@凌驾
public void onNext(@NonNull SearchViewResponseModel s){
适配器。清除();
对于(SearchViewResponseModel.Data模型:s.getData())
add(新的SearchViewModel(model.get_id(),model.getThumbnail(),model.getTitle());
}
@凌驾
公共无效onError(@NonNull可丢弃e){
e、 printStackTrace();
}
@凌驾
未完成的公共空间(){
Log.i(“已完成”和“);
}
});
searchView.setOnQueryTextListener(新材料searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回false;
}
@凌驾
公共布尔onQueryTextChange(最终字符串newText){
subject.onNext(newText);
返回true;
}
});
}