Android 中 SearchView

package com.example.euphemiaxiao.classsearch;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
//import android.support.v7.widget.SearchView;
import android.widget.SearchView;
import android.text.TextUtils;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ClassSearch extends AppCompatActivity implements SearchView.OnQueryTextListener{

    private SearchView sv;
    private ListView lv;
    private ArrayAdapter<String> adapter;
    private final String[] mStrings={"2014211501","2014211502","2014211503","2014211504",
                                     "2015211501","2015211502","2015211503","2015211504"};
    //private ArrayList<String> alist;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.class_search);
        lv=(ListView)findViewById(R.id.lv);
        adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mStrings);
        lv.setAdapter(adapter);
       // lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mStrings));
        lv.setTextFilterEnabled(true);//设置lv可以被过滤
        sv=(SearchView)findViewById(R.id.sv);
        sv.setIconifiedByDefault(false);//设置该searchview默认不自动缩小为图标
        sv.setOnQueryTextListener(this);//设置事件监听器
        sv.setSubmitButtonEnabled(true);//设置显示搜索按钮
        sv.setQueryHint("输入班号");//设置默认显示文字

    }

    //单击搜索按钮时激发该方法
    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    //用户输入字符时激发该方法
    @Override
    public boolean onQueryTextChange(String newText) {
        if(TextUtils.isEmpty(newText))
        {//清除ListView的过滤
            lv.clearTextFilter();
        }
        else
        {//使用用户输入的内容对ListView的列表项进行过滤
            lv.setFilterText(newText);
        }
        return false;
    }
}

上面是classsearch代码

 
关于listview,开始报错在ArrayAdapter<String>,错误是指向空指针。这里报错的主要原因来源于setContentView(R.layout.class_search),因为引向的不对所以理所应当调用一直是空指针。一定要看准你所调用的layout是哪个。之前有两个layout,引用错误导致一直报错,后来本人急性子,直接删除了另外一个,才发现这里的错误,写成另一个layout了。
 
关于searchview,报错在sv=(SearchView)findViewById(R.id.sv),错误是:

android.widget.SearchView cannot be cast to android.support.v7.widget.SearchView

 
这个错误的解决是import android.support.v7.widget.SearchView
改成import android.widget.SearchView就解决了(虽然并不知道为神马)
posted @ 2018-02-26 20:50  Shaw_喆宇  阅读(381)  评论(0编辑  收藏  举报