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)