搜索框(SearchView)详解

搜索框(SearchView)详解

ONE Goal, ONE Passion !

整理一下一些系统常用的小组件.先说说搜索框吧.

  • SearchView是 搜索框组件,它可以让用户在文本框内输入文字,并允许通过监听器监听用户输入,当用户输入完成后提交搜索时也可以执行实际的搜索.

第1步: xml文件中声明

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical" tools:context="com.example.windowtest1.SearchViewActivity">

    <SearchView  android:id="@+id/sv" android:layout_width="match_parent" android:layout_height="wrap_content" />
<--可以为SearchView增加自动完成的功能 -->
    <ListView  android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" />

</LinearLayout>

第2步: 获得SearchView并做一些处理

public class SearchViewActivity extends Activity {

    private SearchView sv;
    private ListView lv;

    private String[] mStrings = {"123", "456", "789"};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_view);

        lv = (ListView) findViewById(R.id.lv);

        lv.setAdapter(new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, mStrings));

        //设置ListView启动过滤
        lv.setTextFilterEnabled(true);

        sv = (SearchView) findViewById(R.id.sv);
        //设置sv默认是否自动缩小为图标
        sv.setIconifiedByDefault(false);
        //设置显示收索按钮
        sv.setSubmitButtonEnabled(true);

        //设置sv默认显示的提示文本
        sv.setQueryHint("查找");

        //为该sv设置监听
        sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            //用户点击输入时触发
            @Override
            public boolean onQueryTextSubmit(String query) {

                System.out.println("选择的是---" + query);
// 一般实际应用中可在这里做逻辑处理

                return false;
            }

            // 用户输入时触发
            @Override
            public boolean onQueryTextChange(String newText) {

                //如果newText不为0
                if (newText.isEmpty()) {
                    //
                    lv.clearTextFilter();
                } else {
                    //使用用户输入内容对lv进行过滤
                    lv.setFilterText(newText);
                }
                return false;
            }
        });
    }
}

需要注意的问题—– 为ListView填充数据时使用ArrayAdapter可行,但是如果使用BaseAdapter是不可以实现提示功能的(也就是listview没有作用了).所以还是不要使用BaseAdapter.

市面上见的搜索框比这复杂一些,如网易的新闻搜索,不能使用简单的listview去更改listview是否过滤.要这样实现

伪代码:

 1,使用EditView充当输入框,并监听输入内容.
 2,获得输入的内容后联网去查询应该提示给用户的信息.
 3.当用户点击某一条信息时,实际上点击的是lisetview中某个item.我们 获得这个item的内容,然后将它显示到EditView中.点击搜索 再去做逻辑处理即可.

要下班了,有时间再补充.实现起来应该是满简单的.

你可能感兴趣的:(搜索,自动提示)