Android Filter类

来源:互联网 发布:成都犀牛软件培训班 编辑:程序博客网 时间:2024/06/03 21:40

Android Filter类

Filter过滤器,一般用于搜索。

1、自定义Filter

SearchFilter类继承android.widget.Filter,实现performFiltering和publishResults两个方法。
performFiltering方法用来查找数据。
publishResults方法用来展示数据。

private class SearchFilter extends Filter {private List<String> mTextList = new ArrayList<String>();public SearchFilter() {mTextList.add("abc");mTextList.add("abd");mTextList.add("abe");mTextList.add("acd");mTextList.add("acde");mTextList.add("ace");mTextList.add("bcd");mTextList.add("bce");mTextList.add("bcf");}@Overrideprotected FilterResults performFiltering(CharSequence constraint) {// FilterResults用来保存过滤结果,包含两个属性values和countFilterResults results = new FilterResults();List<String> resultList = new ArrayList<String>();for (String text : mTextList) {if (text.contains(constraint)) {resultList.add(text);}}results.values = resultList;results.count = resultList.size();return results;}@Overrideprotected void publishResults(CharSequence constraint, FilterResults results) {List<String> resultList = new ArrayList<String>();if (results.count == 0) {mContentList.clear();} else {mContentList.clear();mContentList.addAll((List<String>)results.values);}mAdapter.notifyDataSetChanged();}}

2、搜索界面

搜索界面包含一个搜索输入框,和搜索结果列表。调用Filter.filter方法进行过滤。
public class FilterActivity extends Activity {    private EditText mEtInput;    private FilterAdapter mAdapter;    private List<String> mContentList = new ArrayList<String>();    private Filter mFilter = new SearchFilter();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_filter);        mEtInput = (EditText) findViewById(R.id.et_input);        ListView listView = (ListView) findViewById(R.id.id_listview);        mAdapter = new FilterAdapter();        listView.setAdapter(mAdapter);        mEtInput.addTextChangedListener(new TextWatcher() {            @Override            public void beforeTextChanged(CharSequence s, int start, int count, int after) {            }            @Override            public void onTextChanged(CharSequence s, int start, int before, int count) {                queryText(mEtInput.getText().toString());            }            @Override            public void afterTextChanged(Editable s) {            }        });    }    private void queryText(String searchText) {        mFilter.filter(searchText);    }}

显示如下


原创粉丝点击