2
を使用してテキストの変更とフィルタリストを守っはのEditTextのテキスト変化を観察するにはRxAndroid
Observable.from(itemList)
.filter(item-> item.getName().toLowerCase().contains(search.toLowerCase()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Item>() {
@Override
public void onCompleted() {
Utils.crossfade(mProgressView, recyclerHotelOption);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Item item) {
if (mItemListAdapter == null) {
List<Item> itemList = new ArrayList<>();
itemList.add(item);
mItemListAdapter = new ItemListAdapter(mActivity, itemList);
recyclerHotelOption.setAdapter(mItemListAdapter);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mActivity);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerHotelOption.setLayoutManager(linearLayoutManager);
} else {
mItemListAdapter.notifyDataSetChanged(item);
recyclerHotelOption.getLayoutManager().scrollToPosition(0);
}
}
});
項目の固定されたリストをフィルタリングするために、両方を組み合わせてどのように?
更新
私は答えに基づいてコードを変更し、それはまだ働いていません。私は次のようにそれを行うだろう
RxSearchView.queryTextChangeEvents(mSearchView)
.map(textViewTextChangeEvent -> textViewTextChangeEvent.toString().toLowerCase())
.switchMap(s -> Observable.from(items)
.filter(item-> item.getItemName().toLowerCase().contains(s.toLowerCase()))
.toList()).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Item>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Item> items) {
mItemListAdapter.notifyDataSetChanged(items);
recyclerView.getLayoutManager().scrollToPosition(0);
}
});
があなたの回答に基づいて更新されたコードを見ることができます。まだ動作していません。 – mjosh
働いていないということを意味しますか?どうしたの? – Michael
リストは 'SearchView'のテキスト変更に基づいてフィルタリングされません。 – mjosh