android - 如何从自定义 listAdapter 重置搜索并显示所有数据?
问题描述
我已经实现了自定义列表适配器,我还添加了搜索过滤器。我的问题是搜索完成后如何重置过滤器并显示所有数据。如果我按 x 图标从SearchView
.
我的 CustomListAdapter 是:
ublic class ChartListAdapter extends BaseAdapter implements Filterable {
ArrayList<ChartModel> list;
ArrayList<ChartModel> filteredList;
private ChartEventHandler chartEventHandler;
Activity context;
public ChartListAdapter(ArrayList<ChartModel> list, Activity context, ChartEventHandler chartEventHandler) {
this.list = list;
this.filteredList = list;
this.context = context;
this.chartEventHandler = chartEventHandler;
}
@Override
public int getCount() {
if(filteredList != null) {
return filteredList.size();
} else {
return 0;
}
}
@Override
public Object getItem(int i) {
return filteredList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(view == null) {
view = View.inflate(context, R.layout.chart_card, null);
}
TextView chart_name = view.findViewById(R.id.chart_name);
SwitchCompat switchCompat = view.findViewById(R.id.chart_selected);
switchCompat.setTag(filteredList.get(i).getChart_id());
chart_name.setText(filteredList.get(i).getChart_name());
switchCompat.setChecked(filteredList.get(i).getCard_selected());
switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(!isNetworkAvailable(context) && b) {
compoundButton.setChecked(false);
chartEventHandler.showCharts("no", false);
} else {
String getTag = compoundButton.getTag().toString();
chartEventHandler.showCharts(getTag, b);
}
}
});
return view;
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if(constraint == null || constraint.length() == 0){
filteredList = list;
}else{
ArrayList<ChartModel> resultsModel = new ArrayList<>();
String searchStr = constraint.toString().toLowerCase();
for(ChartModel itemsModel:list){
if(itemsModel.getChart_id().contains(searchStr)){
resultsModel.add(itemsModel);
}
filteredList = resultsModel;
}
filterResults.values = filteredList;
return filterResults;
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredList = (ArrayList<ChartModel>) results.values;
notifyDataSetChanged();
}
};
}
PS:我不想将listView的adapter设置为null并重新插入数据。任何建议都会有很大帮助。谢谢你。
解决方案
推荐阅读
- r - 基于两列中值组合的列
- python - Django 管理添加用户返回服务器错误 (500)
- python - 我如何使用 TFLearn 与训练指标(当前验证准确度、训练准确度等)进行交互?
- client-server - 如何在 NIO 服务器中优先考虑您的客户端?
- java - 使用 setOnclickListener 和 View 时出错
- javascript - 使用 jQuery (Jira) 检查 XSRF 失败
- c++ - std::ofstream - 将 seekp 设置到错误的位置
- azure - 重启 Azure 容器实例
- docker - How can i run Spectron test in docker?
- python - 调用函数在我的主要代码之前播放