关闭并再次打开后,SearchView中的查询将丢失

时间:2014-08-11 20:00:15

标签: android searchview

我正在处理一个我有SearchView的Fragment。如果我关闭SearchView然后重新打开它,我输入的查询就会消失。

问题是我不想要这种行为。我希望像Google Play商店中的SearchView这样的行为,如果我关闭并打开它,查询仍然存在。

这可能与我没有可搜索的文件有关吗?

1 个答案:

答案 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)。