2016-04-03 16 views
2

kullanarak metin değişikliklerini ve filtre listesini gözlemleyinEditText metin değişikliklerini gözlemek için 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); 
         } 
        } 
       }); 

Nasıl hem öğelerin sabit listesine filtre uygulamak için birleştirmek?

Güncelleme

Ben Yanıta göre kod değişti ama hala çalışmıyor.

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); 
       } 
      }); 

cevap

5

aşağıdaki şekilde yapardı:

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

Eğer Yanıta göre güncellenmiş kodu bakabilir. Hala çalışmıyor. – mjosh

+0

Ne demek istemiyorsunuz? Sorun ne? – Michael

+0

Liste, "SearchView" içindeki metin değişikliğine göre filtreleme yapmıyor. – mjosh