下面贴出主要代码:

  1. <span style="font-size:14px;">
  2. public class MainActivity extends FragmentActivity implements OnClickListener{
  3. public static SearchView mSearchView = null;
  4.  public static ListView lv = null;
  5.      private LazyAdapter adapter = null;
  6.  
  7.  @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_main);
  11.         lv = (ListView) this.findViewById(R.id.lv);
  12.         adapter = new LazyAdapter(this, list);
  13. lv.setAdapter(adapter);</span><span style="font-size:14px;">
  14.  
  15.  mSearchView = (SearchView) findViewById(R.id.srv);
  16. mSearchView.setIconifiedByDefault(false);
  17. mSearchView.setSubmitButtonEnabled(false);
  18. mSearchView.setFocusable(true);
  19. mSearchView.setFocusableInTouchMode(true);
  20. /*
  21. mSearchView.requestFocus();
  22. mSearchView.clearFocus();
  23. mSearchView.onActionViewExpanded();
  24. */
  25. mSearchView.setOnQueryTextListener(new OnQueryTextListener() {
  26. @Override
  27. public boolean onQueryTextSubmit(String query) {
  28. return false;
  29. }
  30. @Override
  31. public boolean onQueryTextChange(String newText) {
  32. ListAdapter adapter = lv.getAdapter();
  33. if(adapter instanceof Filterable){
  34. Filter filter = ((Filterable)adapter).getFilter();
  35. if(newText==null || newText.length()==0){
  36. filter.filter(null);
  37. }else{
  38. filter.filter(newText);
  39. }
  40. }
  41. return true;
  42. }
  43. });
  44. }
  45.  
  46. @Override
  47. protected void onResume() {
  48. mSearchView.setFocusable(true);
  49. mSearchView.setFocusableInTouchMode(true);
  50. // mSearchView.requestFocus(); //获取焦点
  51. super.onResume();
  52. }
  53.  
  54. @Override
  55. public boolean onCreateOptionsMenu(Menu menu) {
  56. getMenuInflater().inflate(R.menu.main, menu);
  57. return true;
  58. }
  59. @Override
  60. public boolean onOptionsItemSelected(MenuItem item) {
  61. return super.onOptionsItemSelected(item);
  62. }
  63. }
  64.  
  65. </span>
  1. <span style="font-size:14px;">
  2. public class LazyAdapter extends BaseAdapter implements Filterable{
  3. private Activity activity;
  4. private static LayoutInflater inflater=null;
  5. public ImageLoader imageLoader;
  6. private List<Map<String, String>> list = null;
  7. private List<Map<String, String>> values = null;
  8. private MyFilter mFilter;
  9. private Object mLock = new Object();
  10.  
  11. public LazyAdapter(Activity a, List<Map<String, String>> list) {
  12. this.activity = a;
  13. this.list = list;
  14. inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  15. imageLoader=new ImageLoader(activity.getApplicationContext());
  16. }
  17. public int getCount() {
  18. return list.size();
  19. }
  20. public Object getItem(int position) {
  21. return position;
  22. }
  23. public long getItemId(int position) {
  24. return position;
  25. }
  26. @SuppressLint("InflateParams")
  27. public View getView(int position, View convertView, ViewGroup parent) {
  28. View vi=convertView;
  29. if(convertView==null){
  30. vi = inflater.inflate(R.layout.item_layout, null);
  31. }
  32. TextView text = BaseViewHolder.get(vi, R.id.title);
  33. TextView fu_text = BaseViewHolder.get(vi, R.id.fu_title);
  34. ImageView image=BaseViewHolder.get(vi, R.id.iv);
  35. text.setText(list.get(position).get("title"));
  36. fu_text.setText(list.get(position).get("fu_title"));
  37. imageLoader.DisplayImage(list.get(position).get("src"), image);
  38. return vi;
  39. }
  40.  
  41. @Override
  42. public Filter getFilter() {
  43. if(mFilter==null){
  44. mFilter = new MyFilter();
  45. }
  46. return mFilter;
  47. }
  48. class MyFilter extends Filter{
  49. @SuppressLint("DefaultLocale")
  50. @Override
  51. protected FilterResults performFiltering(CharSequence prefix) {
  52. FilterResults results = new FilterResults();
  53. if(values==null){
  54. synchronized (mLock) {
  55. values = new ArrayList<Map<String, String>>(list);
  56. }
  57. }
  58. if(prefix==null || prefix.length()==0){
  59. synchronized (mLock) {
  60. List<Map<String, String>> list1 = new ArrayList<Map<String, String>>(values);
  61. results.values = list1;
  62. results.count = list1.size();
  63. }
  64. }else{
  65. String prefixString = prefix.toString().toLowerCase();
  66. List<Map<String, String>> values1 = values;
  67. int count = values1.size();
  68. List<Map<String, String>> newValues = new ArrayList<Map<String, String>>(count);
  69. for(Map<String, String> value : values1){
  70. String title = value.get("title").toLowerCase();
  71. if(title.indexOf(prefixString) != -1){
  72. newValues.add(value);
  73. }
  74. }
  75. results.values = newValues;
  76. results.count = newValues.size();
  77. }
  78. return results;
  79. }
  80. @SuppressWarnings("unchecked")
  81. @Override
  82. protected void publishResults(CharSequence constraint,
  83. FilterResults results) {
  84. list = (List<Map<String,String>>) results.values;
  85. XinwenFragment.list = list;
  86. if(results.count>0){
  87. notifyDataSetChanged();
  88. }else{
  89. notifyDataSetInvalidated();
  90. }
  91. }
  92. }
  93. }
  94.  </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. 怎么用js精确判断li已经在ul存在过了?

    <ul class="memory_messagelist" id="memory_messagelist"> <li><span ...

  2. hadoop问题集(2)

      28. Sqoop: java.lang.NullPointerException sqoop import --connect jdbc:oracle:thin:@//xxxx:1521/aps ...

  3. 基础数据类型-tuple

    Python中,元组tuple与list类似,不同之处在于tuple的元素不能修改,tuple使用(),list使用[], (1)元组的创建使用(),需要注意的是创建包含一个元素的元组: tuple_ ...

  4. jQuery File Upload文件上传插件简单使用

    前言 开发过程中有时候需要用户在前段上传图片信息,我们通常可以使用form标签设置enctype=”multipart/form-data” 属性上传图片,当我们点击submit按钮的时候,图片信息就 ...

  5. lintcode-173-链表插入排序

    173-链表插入排序 用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null 标签 ...

  6. 《学习OpenCV》课后习题解答3

    题目:(P104) 创建一个大小为100*100的三通道RGB图像.将它的元素全部置0.使用指针算法以(20,5)与(40,20)为项点绘制一个绿色平面. 解答: #include "cv. ...

  7. IIS安装出现“安装程序无法复制文件CONVLOG.EX_”的解决办法

    重新安装了一次IIS,结果就在重新安装的时候,出现安装程序无法复制文件CONVLOG.EX_,上网找了找资料,是因为secedit.sdb 数据库的问题,既然是因为这个文件的问题,那么我们就可以使用w ...

  8. [剑指Offer] 47.求1+2+3+...+n

    题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). [思路]用&&的短路思想来求和 ...

  9. Version

    题目 有三个操作: \(change \ u \ v \ a \ b\) : \(u\)到\(v\)路径上的点点权加上\(a+k*b\),\(k\)为第几个点,\(u\)为第0个点. \(query ...

  10. BZOJ 1789 Y形项链(思维)

    这题类似于1787,最后的节点一定是两点的LCA,这里也就是两个字符串的最长公共前缀. # include <cstdio> # include <cstring> # inc ...