我正在处理一个我有SearchView的Fragment。如果我关闭SearchView然后重新打开它,我输入的查询就会消失。
问题是我不想要这种行为。我希望像Google Play商店中的SearchView这样的行为,如果我关闭并打开它,查询仍然存在。
这可能与我没有可搜索的文件有关吗?
答案 0 :(得分:0)
您需要根据文档创建onCloseListener:
如果侦听器要覆盖默认行为,则返回true 清除文本字段并解除它,否则为false。
请参阅 http://developer.android.com/reference/android/widget/SearchView.OnCloseListener.html#onClose()
在查看SearchView的源代码后,我不确定这是否正常,如果查询TextView为空,它似乎只调用onCloseListener。
查看SearchView.onCloseClicked(),看看发生了什么:
private void onCloseClicked() {
CharSequence text = mQueryTextView.getText();
if (TextUtils.isEmpty(text)) {
if (mIconifiedByDefault) {
// If the app doesn't override the close behavior
if (mOnCloseListener == null || !mOnCloseListener.onClose()) {
// hide the keyboard and remove focus
clearFocus();
// collapse the search field
updateViewsVisibility(true);
}
}
} else {
mQueryTextView.setText("");
mQueryTextView.requestFocus();
setImeVisibility(true);
}
}
因此,如果覆盖onCloseListener不起作用,那就是原因。
由于SearchView是公共的,您可以扩展该类并修复onCloseClicked()的逻辑或覆盖onActionViewExpanded / onActionViewCollapsed以恢复并保存查询字符串。
您也可以尝试在OnQueryTextListener中保存查询,然后在onOptionsItemSelected中调用setQuery(savedQuery,false)。