2016-11-08 49 views
0

我有RecyclerView我試圖讓過濾器搜索到回收項目及其工作,但是當我使用它並輸入任何內容時,結果只是列表的第一項。過濾方法只返回第一個項目Android

這是篩選方法

private List<Data> filter(List<Data> datas, String newText) { 
    newText = newText.toLowerCase(); 

    final List<Data> filteredModelList = new ArrayList<>(); 
    for (Data data : datas) { 

     final String text = data.getTODO_TITLE().toLowerCase(); 
     if (text.contains(newText)) { 
      filteredModelList.add(data); 
     } 
    } 
    return filteredModelList; 
} 

,這是菜單

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_search, menu); 
    MenuItem searchItem = menu.findItem(R.id.action_search); 
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
     } 
    }); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 

      return true; 
     } 
     @Override 
     public boolean onQueryTextChange(final String searchQuery) { 
      final List<Data> filteredModelList = filter(dbList, searchQuery); 
      filteredModelList.indexOf(searchQuery); 
      List <Data> search =filteredModelList; 
      todoRecyclerView.scrollToPosition(0); 
      recyclerAdapter = new TodoRecyclerAdapter(search); 
      recyclerAdapter.notifyDataSetChanged(); 

      return false;}}); 
    MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      return true; 
     } 
     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      return true; 
     } 
    }); 
    return true; 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_search) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
}} 
+0

我已經給了你一個工作適配器的源代碼,你爲什麼不使用它呢? – pskink

+0

我不知道如何使用適配器,我試圖用另一種方法 –

+0

你不知道什麼?只需創建適配器,「添加()」一些數據,然後在'setAdapter'方法中使用它,這三個步驟有什麼不明之處? – pskink

回答

0

爲什麼要創建適配器的新實例每次你搜索?

recyclerAdapter = new TodoRecyclerAdapter(search);

而是創造一次調用recyclerAdapter.notifyDataSetChanged();

+0

當我刪除recyclerAdapter = new TodoRecyclerAdapter(搜索); 並運行該應用程序,什麼都不顯示 –

+0

你必須把它作爲全球和設置適配器! –