下面贴出主要代码:

<span style="font-size:14px;">
public class MainActivity extends FragmentActivity implements OnClickListener{
public static SearchView mSearchView = null;
 public static ListView lv = null;
     private LazyAdapter adapter = null;  @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
        lv = (ListView) this.findViewById(R.id.lv);
        adapter = new LazyAdapter(this, list);
lv.setAdapter(adapter);</span><span style="font-size:14px;">  mSearchView = (SearchView) findViewById(R.id.srv);
mSearchView.setIconifiedByDefault(false);
mSearchView.setSubmitButtonEnabled(false);
mSearchView.setFocusable(true);
mSearchView.setFocusableInTouchMode(true);
/*
mSearchView.requestFocus();
mSearchView.clearFocus();
mSearchView.onActionViewExpanded();
*/
mSearchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
ListAdapter adapter = lv.getAdapter();
if(adapter instanceof Filterable){
Filter filter = ((Filterable)adapter).getFilter();
if(newText==null || newText.length()==0){
filter.filter(null);
}else{
filter.filter(newText);
}
}
return true;
}
});
} @Override
protected void onResume() {
mSearchView.setFocusable(true);
mSearchView.setFocusableInTouchMode(true);
// mSearchView.requestFocus(); //获取焦点
super.onResume();
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
} </span>
<span style="font-size:14px;">
public class LazyAdapter extends BaseAdapter implements Filterable{
private Activity activity;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;
private List<Map<String, String>> list = null;
private List<Map<String, String>> values = null;
private MyFilter mFilter;
private Object mLock = new Object(); public LazyAdapter(Activity a, List<Map<String, String>> list) {
this.activity = a;
this.list = list;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@SuppressLint("InflateParams")
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null){
vi = inflater.inflate(R.layout.item_layout, null);
}
TextView text = BaseViewHolder.get(vi, R.id.title);
TextView fu_text = BaseViewHolder.get(vi, R.id.fu_title);
ImageView image=BaseViewHolder.get(vi, R.id.iv);
text.setText(list.get(position).get("title"));
fu_text.setText(list.get(position).get("fu_title"));
imageLoader.DisplayImage(list.get(position).get("src"), image);
return vi;
} @Override
public Filter getFilter() {
if(mFilter==null){
mFilter = new MyFilter();
}
return mFilter;
}
class MyFilter extends Filter{
@SuppressLint("DefaultLocale")
@Override
protected FilterResults performFiltering(CharSequence prefix) {
FilterResults results = new FilterResults();
if(values==null){
synchronized (mLock) {
values = new ArrayList<Map<String, String>>(list);
}
}
if(prefix==null || prefix.length()==0){
synchronized (mLock) {
List<Map<String, String>> list1 = new ArrayList<Map<String, String>>(values);
results.values = list1;
results.count = list1.size();
}
}else{
String prefixString = prefix.toString().toLowerCase();
List<Map<String, String>> values1 = values;
int count = values1.size();
List<Map<String, String>> newValues = new ArrayList<Map<String, String>>(count);
for(Map<String, String> value : values1){
String title = value.get("title").toLowerCase();
if(title.indexOf(prefixString) != -1){
newValues.add(value);
}
}
results.values = newValues;
results.count = newValues.size();
}
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
list = (List<Map<String,String>>) results.values;
XinwenFragment.list = list;
if(results.count>0){
notifyDataSetChanged();
}else{
notifyDataSetInvalidated();
}
}
}
}
 </span>

Android SearchView结合Filter实现列表检索功能使用总结的更多相关文章

  1. android 开发 实现RecyclerView的列表单选功能

    实现思维: 1.首先在一行的xml布局中添加一个选中效果的icon图片,未选中的情况下INVISIBLE或者GONE 都可以,推荐使用INVISIBLE它会占用布局位置但是不显示,这样可以避免布局中其 ...

  2. 百度地图 Android SDK - 检索功能使用的简单演示样例

    百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...

  3. Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

    本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样:   ▲ 微信群聊界面里的@人功能    ▲ QQ群聊界面里 ...

  4. 如何获得Android手机的软件安装列表

    Android的PackageManager类用于检索目前安装在设备上的应用软件包的信息.你可以通过调用getpackagemanager()得到PackageManager类的一个实例.对查询和操作 ...

  5. PHP多条件分类列表筛选功能开发实例

    PHP多条件分类列表筛选功能开发实例,前后台一起实现 后台对接可以拼接sql语句,PHP通过表单值隐藏值筛选,常用又实用! 表单筛选核心函数 function Filter(a, b) { var $ ...

  6. 【转】一张图解析FastAdmin中的表格列表的功能

     一张图解析FastAdmin中的表格列表的功能 功能描述请根据图片上的数字索引查看对应功能说明. 1.时间筛选器如果想在搜索栏使用时间区间进行搜索,则可以在JS中修改修改字段属性,如 {field: ...

  7. Android 使用ListView的A-Z字母排序功能实现联系人模块

    在上一篇文章其中,主要学习了ListView的A-Z字母排序功能以及依据输入框的输入值改变来过滤搜索结果,假设输入框里面的值为空.更新为原来的列表,否则为过滤数据列表,包含汉字转成拼音的功能.假设你还 ...

  8. 百度地图API 批量添加 带检索功能的信息窗口

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信

    以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3364728.html 我前两天写过一篇博客<Android使用Fragment来 ...

随机推荐

  1. Linux内核设计笔记11——定时器

    定时器与时间管理笔记 内核中的时间 时钟中断:内核中的系统定时器以某种频率触发中断,该频率可以通过编程预定. 节拍率HZ:时钟中断的频率称为节拍率. 节拍:相邻两次中断的时间间隔称为节拍,1/节拍率. ...

  2. cp的使用

    一.形式 cp [options] source1 source2 source3 .... directory 参数意义: 参数 意义 -i 当目标文件已存在时,会询问是否覆盖 -p 连同文件的属性 ...

  3. Python学习之路5 - 函数

    函数 定义方式: def func(): "这里面写函数的描述" 这里写代码 return x #如果没有返回值就叫"过程",函数和过程的区别就是有无返回值 实 ...

  4. Java微笔记(4)

    Java 中的内部类 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类 内部类的主要作用如下: 内部类提供了更好的封装,可以把内部类隐藏在外部类之 ...

  5. lintcode-148-颜色分类

    148-颜色分类 给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红.白.蓝的顺序进行排序. 我们可以使用整数 0,1 和 2 分别代表红,白,蓝. 注意事项 ...

  6. iOS开发UIColor,CGColor,CIColor三者的区别和联系

    最近看了看CoreGraphics的东西,看到关于CGColor的东西,于是就想着顺便看看UIColor,CIColor,弄清楚它们之间的区别和联系.下面我们分别看看它们三个的概念: 一.UIColo ...

  7. iOS-开发过程中应用间跳转问题

  8. 读写INI文件操作类

    详情介绍:http://zh.wikipedia.org/wiki/INI%E6%96%87%E4%BB%B6 示例: 下面是一个虚拟的程序,其INI文件有两个小节,前面的小节是用来设置拥有者的信息, ...

  9. SQL SERVER技术内幕之5 表表达式

    表表达式是一种命名的查询表达式,代表一个有效的关系表.可以像其他表一样,在数据处理语句中使用表表达式.SQL Server支持4种类型的表表达式:派生表(derived table).公用表表达式(C ...

  10. asp.net 间隔一段时间执行某方法

    设想网站后台每秒自动更新一下Cache["test"]中的值,通过这个实现就可以完成一些在间隔多少时间更新一下数据库的操作. 1.定义一个事件类BMAEvent,在Processo ...