如何在API栏8的ListView中使用带有过滤器模式的SearchView

时间:2014-09-02 14:42:30

标签: android listview search filter

我正在使用minSdkVersion 8开发Android并使用ListView在我的应用中显示移动联系人,但现在我还需要为列表视图添加过滤器,但我找不到任何使用{{1在SearchView你们可以帮忙吗?这是我的代码 -

sdkVersion 8

2 个答案:

答案 0 :(得分:1)

有一个类就是支持库:

SearchViewCompat

答案 1 :(得分:0)

要遵循的简单步骤:

  • 采用简单的EditText
  • 在其上应用过滤器

示例代码:

yourEditSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                adapter.getFilter().filter(s);
            }
        };


class MyAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener,  Filterable  {
       @Override
    public Filter getFilter() {
        Filter filter = new Filter() {

            @Override
            protected void publishResults(CharSequence constraint,
                    FilterResults results) {

                // Now we have to inform the adapter about the new list filtered
                if (results.count == 0)
                     notifyDataSetInvalidated();
                else {
                    names= (ArrayList<String>) results.values;
                   notifyDataSetChanged();
                }
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {


                // perform your search here using the searchConstraint String.

                constraint = constraint.toString().toLowerCase();

               // check with the nane in list and add it
               //iterate and check with the matching string
               for (int i=0;i<names.size();i++) {
                    String dataNames = names.get(i);
                    if (dataNames.toLowerCase().contains(constraint.toString())) {
                         FilteredArrayNames.add(entity);
                  }
                }

                results.count = FilteredArrayNames.size();
                results.values = FilteredArrayNames;

                return results;
            }
        };
        return filter;
    }

}