为动态填充的适配器实现可过滤接口
Implements filterable interface for adapter that is dynamically populated
如何为动态填充的适配器保留原始数据,需要在用户在列表视图上进行搜索请求之前对数据进行快照>
我在 myadapter 中实现 Filterable 接口,并且不能在构造函数上复制原始数据,因为我的列表已经是空的,稍后会被填充。
private Filter filteredList = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
List<ITEMMODEL> filtered = new ArrayList<>();
if (charSequence == null || charSequence.length() == 0) {
filtered.addAll(itemsFull);
} else {
for (ITEMMODEL item : itemsFull) {
Log.d(TAG,item.getName());
if (item.getName().toLowerCase().contains(charSequence.toString().toLowerCase().trim())) {
filtered.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filtered;
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
items.clear();
items.addAll((List)filterResults.values);
notifyDataSetChanged();
}
};
public void onResume() {
super.onResume();
Cursor cursor = getActivity().getContentResolver().query(ItemsProvider.CONTENT_URI,null,null,null,null);
itemListAdapter.clear();
while ((cursor.moveToNext())) {
itemListAdapter.addItem(itemFromCursor(cursor));
}
}
尝试在适配器内部,像这样修改 clear() 方法:
@Override
public void clear() {
super.clear();
itemsFull.clear();
}
和 addItem() 方法将项目添加到两个列表(items 和 itemsFull)。希望对您有所帮助!
如何为动态填充的适配器保留原始数据,需要在用户在列表视图上进行搜索请求之前对数据进行快照> 我在 myadapter 中实现 Filterable 接口,并且不能在构造函数上复制原始数据,因为我的列表已经是空的,稍后会被填充。
private Filter filteredList = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
List<ITEMMODEL> filtered = new ArrayList<>();
if (charSequence == null || charSequence.length() == 0) {
filtered.addAll(itemsFull);
} else {
for (ITEMMODEL item : itemsFull) {
Log.d(TAG,item.getName());
if (item.getName().toLowerCase().contains(charSequence.toString().toLowerCase().trim())) {
filtered.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filtered;
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
items.clear();
items.addAll((List)filterResults.values);
notifyDataSetChanged();
}
};
public void onResume() {
super.onResume();
Cursor cursor = getActivity().getContentResolver().query(ItemsProvider.CONTENT_URI,null,null,null,null);
itemListAdapter.clear();
while ((cursor.moveToNext())) {
itemListAdapter.addItem(itemFromCursor(cursor));
}
}
尝试在适配器内部,像这样修改 clear() 方法:
@Override
public void clear() {
super.clear();
itemsFull.clear();
}
和 addItem() 方法将项目添加到两个列表(items 和 itemsFull)。希望对您有所帮助!