2017-01-16 90 views
0

我正在實施使用RecyclerView編輯文本,其中RecylecerView應在用戶在編輯文本中輸入任何文本時更新其項目及其視圖。這是一個非常普遍的要求,我發現了很多解決方案。但我面臨一個奇怪的問題,過濾recylcerView顯示列表中錯誤的項目。
爲了說明。讓我們假設RecylcerView包含項目爲a,b,c,d和e。 如果我搜索'c。列表只顯示一個項目'a'。但是當我點擊這個項目時,它只是'c'。這意味着只有佈局沒有得到更新,但值得更新。
這是我的實現。RecyclerView項目佈局未更新

public class CustomFilter extends Filter{ 
    private CustomFilter(SListRecyclerViewAdapter mAdapter) { 
     super(); 
    } 
    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     sData.clear(); 
     final FilterResults results = new FilterResults(); 
     if (constraint.length() == 0) { 
      sData.addAll(filteredsData); 
     } 
     else { 
      final String filterPattern = constraint.toString().toLowerCase().trim(); 
      for (final S surg: filteredsData) { 
       if (S.getSUserName().toLowerCase(Locale.getDefault()).contains(filterPattern)) { 
        sData.add(surg); 
       } 
      } 
     } 
     results.values = sData; 
     results.count = sData.size(); 
     return results; 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     notifyDataSetChanged(); 
    } 
+0

可能這會幫助你。 [http://stackoverflow.com/questions/30398247/how-to-filter-a-recyclerview-with-a-searchview](http://stackoverflow.com/questions/30398247/how-to-filter-a- recyclerview-with-a-searchview) –

+0

@RanjithKP謝謝,但我已經通過這..無濟於事。我的問題是爲什麼佈局不重繪即使被稱爲notifyDataSetChanged。 – manishKumarSingh

回答

0

請看下面的例子,你必須更新result.Please數據嘗試

@SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      mFilteredData = (ArrayList<String>) results.values; 
      notifyDataSetChanged(); 
     } 
+0

不能正常工作..我已經在performFiltering方法中設置了值。 'sData'在這裏是與Adapter相關聯的ArrayList。 – manishKumarSingh

0

我不爲什麼它以這種方式工作。但我找到了解決辦法。 recyclerView.swapAdapter(sListRecyclerViewAdapter,false); 它基本上是用新的適配器交換適配器,但回收更早的視圖。它不是非常優化,但至少可行。

相關問題