2016-04-03 13 views
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); 
       } 
      }); 

答えて

5

Observable<CharSequence> textChanges = RxTextView.textChangeEvents(editText); 
textChanges 
    .map(search -> search.toString().toLowerCase()) 
    .switchMap(search -> 
     Observable.from(itemList) 
      .filter(item -> item.getName().toLowerCase().contains(search)) 
      .toList() 
    ) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(
     new Observer<List<Item>>() { 
      // ... 
     }); 
+0

があなたの回答に基づいて更新されたコードを見ることができます。まだ動作していません。 – mjosh

+0

働いていないということを意味しますか?どうしたの? – Michael

+0

リストは 'SearchView'のテキスト変更に基づいてフィルタリングされません。 – mjosh

関連する問題