RecyclerView 不会在搜索时动态更新

RecyclerView not updating dynamically on search

我有一个包含航班信息的回收站视图,我正在使用搜索栏上的航班号进行搜索。当我搜索时,recyclerview 会动态更新,其逻辑在我的过滤器函数中,但是当我清除搜索时,recycler 视图完全是空的。我该如何解决这个问题?

搜索过滤功能

private void filter(String text) {
     ArrayList<FlightItem> filteredList = new ArrayList<>();

     for(FlightItem item : flightItems) {
         if(item.getFlightNumber().toLowerCase().contains(text.toLowerCase())){
             filteredList.add(item);
          }
     }
     mAdapter.filterList(filteredList);
     flightItems.clear();
     flightItems.addAll(filteredList);
   }
}

保留 flightItems 的副本,因为您在添加筛选的项目之前要清除它

ArrayList<FlightItem> flightItems = new ArrayList<>();
ArrayList<FlightItem> flightItemsCopy = new ArrayList<>();

private void filter(String text) {
     if(text.trim() == ""){
        clearSearch()
        return
     }
     ArrayList<FlightItem> filteredList = new ArrayList<>();

     for(FlightItem item : flightItems) {
         if(item.getFlightNumber().toLowerCase().contains(text.toLowerCase())){
             filteredList.add(item);
          }
     }
     flightItemsCopy.clear(); //clear copy
     flightItemsCopy.addAll(flightItems); // make a copy here
     mAdapter.filterList(filteredList);
     flightItems.clear();
     flightItems.addAll(filteredList);
   }
}

private void clearSearch(){
    flightItems.clear();
    flightItems.addAll(flightItemsCopy);
    mAdapter.notifyDataSetChanged();
}

void filter(String text){
 List<DataHolder> temp = new ArrayList();
 for(DataHolder d: displayedList){
       //or use .equal(text) with you want equal match
       //use .toLowerCase() for better matches
       if(d.getEnglish().contains(text)){
           temp.add(d);
       }
 }
 //update recyclerview
 disp_adapter.updateList(temp);

}

更新列表方法:

public void updateList(List<DataHolder> list){
 displayedList = list;
 notifyDataSetChanged();

}