概述
android.widget.Filterable
public interface Filterable{public Filter getFilter();
}
Filterable通常由Adapter实现,可以通过Filter对象来过滤数据。Filter对象使用一个filter pattern对数据进行约束。Filter是一个抽象类,它的继承者需要实现以下两个重要方法:
Filter filter = new Filter(){
public Filter.FilterResults performFiltering(CharSequence constraint){
//启动新的线程,根据constraint字符串序列过滤数据,返回FilterResults将作为参数传递给
//publishResults()方法在UI线程中执行。
...
}
public void publishResults(CharSequence constraint, Filter.FilterResults results){
//在UI线程处理这些过滤后的数据
..
}
}
下面是网上的一个例子,看一下如何使用它。
MainActivity.java
package com.example.filterdemos;
import java.util.ArrayList;
import java.util.HashMap;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
private Context mContext;
private ListView mListView;
private ListViewAdapter mAdapter;
private ArrayList<String> mArrayList;
private HashMap<String, String> mHashMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
mListView = (ListView) findViewById(R.id.list);
mArrayList = new ArrayList<String>();
mArrayList.add("张三1");
mArrayList.add("李四1");
mArrayList.add("王五1");
mArrayList.add("张三2");
mArrayList.add("李四2");
mArrayList.add("王五2");
mArrayList.add("张三3");
mArrayList.add("李四3");
mArrayList.add("王五3");
mAdapter=new ListViewAdapter(mContext, mArrayList);
mAdapter.getFilter().filter("1");
mListView.setAdapter(mAdapter);
}
}
ListViewAdapter.java
package com.example.filterdemos;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
public class ListViewAdapter extends BaseAdapter implements Filterable{
private static final String TAG = "ListViewAdapter";
private NameFilter mFilter;
private List<String> mArrayList;
private List<String> mFilteredArrayList;
private LayoutInflater inflater;
public ListViewAdapter(Context context, List<String> arrayList){
mArrayList = arrayList;
inflater = LayoutInflater.from(context);
mFilteredArrayList = new ArrayList<String>();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
if(mArrayList
== null){
return 0;
}else {
return mArrayList.size();
}
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
if(mArrayList == null){
return null;
}else {
return mArrayList.get(arg0);
}
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = convertView;
ViewHolder holder = null;
if(view == null){
view = inflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.textView = (TextView)view.findViewById(R.id.text);
view.setTag(holder);
}else{
holder = (ViewHolder) view.getTag();
}
if(mArrayList != null){
holder.textView.setText(mArrayList.get(position));
}
return view;
}
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
if(mFilter == null){
mFilter = new NameFilter();
}
return mFilter;
}
private class ViewHolder{
TextView textView;
}
class NameFilter extends Filter{
@Override
protected FilterResults performFiltering(CharSequence arg0) {
Log.d(TAG,"performFiltering(), arg0 = " + arg0);
// TODO Auto-generated method stub
FilterResults results = new FilterResults();
for(Iterator<String> iterator = mArrayList.iterator();iterator.hasNext();){
String name = iterator.next();
System.out.println("name ----> " + name);
if(name.contains(arg0)){
mFilteredArrayList.add(name);
}
}
results.values = mFilteredArrayList;
return results;
}
@Override
protected void publishResults(CharSequence arg0, FilterResults results) {
// TODO Auto-generated method stub
Log.d(TAG,"pulbishResults, arg0 = " + arg0);
mArrayList = (List<String>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
}
res/layout/activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</RelativeLayout>
res/layout/list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
最后
以上就是专一水池为你收集整理的Android中的Filter使用的全部内容,希望文章能够帮你解决Android中的Filter使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复