Android SearchView为空字符串
我正在尝试使用SearchView,并且除了当我想搜索一个空字符串时,我已经完成了所有工作。
当我删除最后一个字符时,onQueryTextChange会做出反应,但我希望用户能够在搜索字段为空时按下搜索按钮。
final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
// Do something
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
// Do something
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
我也尝试过使用OnKeyListner。 但它似乎也不起作用。
searchView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
//Do something
return true;
}
});
这似乎是一件简单的事情,但我无法实现。 有什么建议么?
编辑
我已经找了一段时间的解决方案,发布后几分钟,我找到了一个解决方案。
在这个线程上,我发现这不是一个错误,但它实际上是故意的。
Android SearchView.OnQueryTextListener OnQueryTextSubmit不会触发空查询字符串
所以我刚下载了ActionBarSherlock并对onSubmitQuery()方法做了一些修改,
从
private void onSubmitQuery() {
CharSequence query = mQueryTextView.getText();
if (query != null && TextUtils.getTrimmedLength(query) > 0) {
if (mOnQueryChangeListener == null
|| !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) {
if (mSearchable != null) {
launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString());
setImeVisibility(false);
}
dismissSuggestions();
}
}
}
和修改后的版本
private void onSubmitQuery() {
CharSequence query = mQueryTextView.getText();
if(query == null) {query = "";}
if (mOnQueryChangeListener == null
|| !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) {
if (mSearchable != null) {
launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString());
setImeVisibility(false);
}
dismissSuggestions();
}
}
希望这有助于其他人有这个问题。
也许它不适合你的应用,但你也可以选择使用简单的EditText
,然后添加一个TextWatcher
监听器。 这样,即使用户输入空字符串,也可以捕获每个输入。
我有与SearchView相同的问题,但我不想使用ActionBarSherlock,所以我想出了解决方案,它包括样式自己的SearchView,如指南http://novoda.com/blog/styling-the-actionbar-searchview/和为EditText设置OnEditorActionListener(如何在用户点击时触发一个动作?),它是SearchView的一部分。
final SearchView searchView = (SearchView)findViewById(R.id.search);
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);
searchPlate.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
//Do something
}
return false;
});
链接地址: http://www.djcxy.com/p/92953.html