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();
}
我有一个包含航班信息的回收站视图,我正在使用搜索栏上的航班号进行搜索。当我搜索时,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();
}