Android 自动的组件SearchView 在实现自动搜索有很好的支持,这是前段时间做的一个项目里面需要实现的功能在此做一个简单的总结。
SearchView的布局
<SearchView
android:id="@+id/actionbar_right_edittext"
android:layout_width="210dp"
android:layout_height="40dp"
android:imeOptions="actionSearch"
android:textColor="@color/white"
android:textSize="@dimen/film_gridview_average" />
实力画SearchView并设置相关属性
mSearchView = (SearchView) findViewById(R.id.actionbar_right_edittext);
//设置某人搜索按钮是否在输入框内,false表示不在,true表示在
mSearchView.setIconifiedByDefault(false);
mSearchView.setFocusable(true);
mSearchView.clearFocus();
mSearchView.setOnCloseListener(this);
mSearchView.setOnQueryTextListener(this);
SearchView的监听事件
@Override
public boolean onQueryTextSubmit(String query) {
//获取软键盘对象
InputMethodManager imm =
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(mSearchView.getWindowToken(), 0);
}
/**
* 在这里进行你对输入条件的查询操作
*
*
*/
Fragment fragment = SearchListFragment.newInstance("关键字搜索", query,
sql(query));
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.main_fragment, fragment);
transaction
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.addToBackStack("listFrament");
transaction.commit();
mListView.setVisibility(View.GONE);
mSearchView.clearFocus();
}
return true;
}
@Override
public boolean onQueryTextChange(String queryText) {
/**
* 在这里编写你一边输入一边查询的操作
*
*
*/
AppConfig.getInstance().setSearchStr(queryText);
list = null;
if (!queryText.equals("")) {
String sql = "select * from localMovie where movieChar like '%"
+ queryText + "%' or movieName like '%" + queryText
+ "%' order by playCount ";
list = dao.select(sql);
if (list != null || list.size() != 0) {
mAdapter.loadNewData(list);
mListView.setVisibility(View.VISIBLE);
}
} else {
mListView.setVisibility(View.GONE);
}
return true;
}
//关闭搜索框的操作
@Override
public boolean onClose() {
AppConfig.getInstance().setSearchStr(null);
if (list != null) {
list.clear();
}
mListView.setVisibility(View.GONE);
return true;
}