[关闭]
@gogogodeng 2017-08-10T13:44:14.000000Z 字数 3563 阅读 419

SearchView

android控件


搜索控件

属性

代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <SearchView
  7. android:id="@+id/search_view"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:iconifiedByDefault="true"
  11. android:inputType="text"
  12. android:imeOptions="actionSearch"
  13. android:queryHint="请输入关键字" />
  14. <ListView
  15. android:id="@+id/list_view"
  16. android:layout_width="match_parent"
  17. android:layout_height="match_parent">
  18. </ListView>
  19. </LinearLayout>

java代码

  1. package com.testapp.app;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.text.TextUtils;
  5. import android.widget.ArrayAdapter;
  6. import android.widget.ListView;
  7. import android.widget.SearchView;
  8. /**
  9. * Created by develop on 2015/11/16.
  10. */
  11. public class SearchViewActivity extends Activity {
  12. // 自动完成的列表
  13. private final String[] mStrings = { "aaaaaaa", "bbbbbbb", "ccccccc", "ddddddd", "eeeeeee", "fffffff" };
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.searchview);
  18. SearchView sv = (SearchView)findViewById(R.id.search_view);
  19. final ListView lv = (ListView)findViewById(R.id.list_view);
  20. lv.setTextFilterEnabled(true);
  21. lv.setAdapter(new ArrayAdapter<String>(SearchViewActivity.this, android.R.layout.simple_list_item_1, mStrings));
  22. sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
  23. @Override
  24. public boolean onQueryTextSubmit(String query) {
  25. return false;
  26. }
  27. @Override
  28. public boolean onQueryTextChange(String newText) {
  29. if (TextUtils.isEmpty(newText)) {
  30. // 清除ListView的过滤
  31. lv.clearTextFilter();
  32. } else {
  33. // 使用用户输入的内容对ListView的列表项进行过滤
  34. lv.setFilterText(newText);
  35. }
  36. return false;
  37. }
  38. });
  39. }
  40. }

但是这样写只能匹配第一个字母,所以还得改一下

  1. package com.testapp.app;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.text.TextUtils;
  5. import android.widget.ArrayAdapter;
  6. import android.widget.ListView;
  7. import android.widget.SearchView;
  8. import java.util.ArrayList;
  9. /**
  10. * Created by develop on 2015/11/16.
  11. */
  12. public class SearchViewActivity extends Activity {
  13. private SearchView sv;
  14. private ListView lv;
  15. // 自动完成的列表
  16. private final ArrayList<String> mAllList = new ArrayList<String>();
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.searchview);
  21. sv = (SearchView)findViewById(R.id.search_view);
  22. lv = (ListView)findViewById(R.id.list_view);
  23. lv.setAdapter(new ArrayAdapter<Object>(SearchViewActivity.this,android.R.layout.simple_list_item_1,loadData()));
  24. sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
  25. @Override
  26. public boolean onQueryTextSubmit(String query) {
  27. return false;
  28. }
  29. @Override
  30. public boolean onQueryTextChange(String newText) {
  31. if (TextUtils.isEmpty(newText)) {
  32. // 清除ListView的过滤
  33. loadData();
  34. } else {
  35. // 使用用户输入的内容对ListView的列表项进行过滤
  36. updateLayout(searchItem(newText));
  37. }
  38. return false;
  39. }
  40. });
  41. }
  42. //加载数据
  43. public Object[] loadData() {
  44. mAllList.add("aaaa");
  45. mAllList.add("ddfa");
  46. mAllList.add("qwww");
  47. mAllList.add("sder");
  48. mAllList.add("fdzc");
  49. mAllList.add("cfjh");
  50. mAllList.add("reoo");
  51. return mAllList.toArray();
  52. }
  53. //搜索数据
  54. public Object[] searchItem(String name) {
  55. ArrayList<String> mSearchList = new ArrayList<String>();
  56. for (int i = 0; i < mAllList.size(); i++) {
  57. int index = mAllList.get(i).indexOf(name);
  58. // 存在匹配的数据
  59. if (index != -1) {
  60. mSearchList.add(mAllList.get(i));
  61. }
  62. }
  63. return mSearchList.toArray();
  64. }
  65. public void updateLayout(Object[] obj) {
  66. lv.setAdapter(new ArrayAdapter<Object>(SearchViewActivity.this,
  67. android.R.layout.simple_list_item_1, obj));
  68. }
  69. }

效果图
效果图

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注