Android:在自定义适配器中实现performFiltering()
为了让这个简单的搜索功能发挥作用,我已经试了好几个小时了。我实施了一些性能过滤部分,如下所示:Android:在自定义适配器中实现performFiltering(),android,listview,adapter,Android,Listview,Adapter,为了让这个简单的搜索功能发挥作用,我已经试了好几个小时了。我实施了一些性能过滤部分,如下所示: ContactsFilter filter; ArrayList<Contact> suggestions; ArrayList<Contact> seperateSuggestions; @Override public Filter getFilter() { if (filter == null)
ContactsFilter filter;
ArrayList<Contact> suggestions;
ArrayList<Contact> seperateSuggestions;
@Override
public Filter getFilter() {
if (filter == null)
filter = new ContactsFilter();
return filter;
}
private class ContactsFilter extends Filter {
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
// TODO Auto-generated method stub
suggestions = (ArrayList<Contact>) results.values;
mFancyAdapter.notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults r = new FilterResults();
if (seperateSuggestions == null) {
synchronized (suggestions) {
seperateSuggestions = new ArrayList<Contact>(suggestions);
}
}
ArrayList<Contact> values = (ArrayList<Contact>)seperateSuggestions;
int count = values.size();
ArrayList<Contact> list = new ArrayList<Contact>();
String prefix = constraint.toString().toLowerCase();
if(constraint != null || constraint.length() == 0) {
synchronized (suggestions) {
ArrayList<Contact> list2 = new ArrayList<Contact>(seperateSuggestions);
r.values = list2;
r.count = list2.size();
}
}
for (int i=0; i<count; i++) {
if( values.get(i).getFullName().toLowerCase().contains(prefix)) {
list.add(suggestions.get(i));
}
}
r.values = list;
r.count = list.size();
return r;
}
}
}
Logcat还告诉您在哪一行发生异常。你愿意和我们分享你的日志吗@M-WaJeEh很抱歉没有发布它,它在编辑中now@M-WaJeEh
synchronized(suggestions){
您不能调用synchronized(null)
。请确保建议不为null。另外,请阅读有关如何正确执行筛选的教程。有关此主题的内容很多。
10-05 13:08:31.862: W/Filter(6973): An exception occured during performFiltering()!
10-05 13:08:31.862: W/Filter(6973): java.lang.NullPointerException
10-05 13:08:31.862: W/Filter(6973): at com.example.contactmanager.ListAdapter$ContactsFilter.performFiltering(ListAdapter.java:555)
10-05 13:08:31.862: W/Filter(6973): at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234)
10-05 13:08:31.862: W/Filter(6973): at android.os.Handler.dispatchMessage(Handler.java:99)
10-05 13:08:31.862: W/Filter(6973): at android.os.Looper.loop(Looper.java:137)
10-05 13:08:31.862: W/Filter(6973): at android.os.HandlerThread.run(HandlerThread.java:60)