布局文件,一个SearchView配套一个ListView,使其增加一个自动完成的功能,
<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">
<SearchView
android:id="@+id/sv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<!-- 为SearchView定义自动完成的ListView -->
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
代码
package com.test.searchview;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
import android.widget.Toast;
public class MainActivity extends Activity {
private SearchView sv;
private ListView lv;
private final String[] mString = {
"Bei jing",
"Shang hai", "Chang sha", "Chang chun", "Nan jing",
"Dong jing", "Ji nan", "Qing dao", "Xiang tan",
"Zhu zhou", "Heng yang"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sv = (SearchView)findViewById(R.id.sv);
lv = (ListView)findViewById(R.id.lv);
lv.setAdapter(new ArrayAdapter<String>
(this, android.R.layout.simple_list_item_1, mString));
//这里开启ListView的过滤功能,必须开启,否则不会过滤
lv.setTextFilterEnabled(true);
//设置SearchView默认是否自动缩小为图标
sv.setIconifiedByDefault(false);
//设置SearchView组件的内默认的显示提示文本
sv.setQueryHint("查找");
//设置该SearchView显示搜索按钮
sv.setSubmitButtonEnabled(true);
//为SearchView设置监听器
sv.setOnQueryTextListener(new OnQueryTextListener() {
//用户输入文字激发该方法
@Override
public boolean onQueryTextSubmit(String newtext) {
if(TextUtils.isEmpty(newtext)){
// 清除ListVie的过滤
lv.clearTextFilter();
}else{
lv.setFilterText(newtext);
}
return true;
}
//单击搜索是激发该方法
@Override
public boolean onQueryTextChange(String newText) {
//实际应用中应该在该方法中执行实际查询
//此处仅使用Toast显示用户输入的查询内容
Toast.makeText(MainActivity.this, newText, Toast.LENGTH_SHORT).show();
return false;
}
});
}
}