不会调用SearchView.OnCloseListener

lok*_*oko 6 java android android-widget searchview

我正在使用操作栏并向其添加searchView.我已经实现了searchView.onCLoseListener,但似乎没有被调用.有什么建议 ?

我的代码看起来像这样:

SearchView searchView = new SearchView(getContext());
searchView.setOnCloseListener(new OnCloseListener() {

  public boolean onClose() {
    searchView.setVisibility(SearchView.GONE);
    // Do Something

    return true;
  }
});
Run Code Online (Sandbox Code Playgroud)

Dar*_*rio 24

我在android 4.1.1上遇到了同样的问题.看起来这是一个已知的错误:https://code.google.com/p/android/issues/detail?id = 25758

无论如何,作为一种解决方法,我使用状态更改侦听器(当SearchView与操作栏分离时,它也明显关闭).

view.addOnAttachStateChangeListener(new OnAttachStateChangeListener() {

    @Override
    public void onViewDetachedFromWindow(View arg0) {
        // search was detached/closed
    }

    @Override
    public void onViewAttachedToWindow(View arg0) {
        // search was opened
    }
});
Run Code Online (Sandbox Code Playgroud)

以上代码在我的案例中运作良好.


小智 5

为了从 SearchView.OnCloseListener 调用 onClose() 方法。我按照以下方式使它工作。将其添加到您的搜索视图中

searchView.setIconifiedByDefault(true);
searchView.setOnCloseListener(this);
Run Code Online (Sandbox Code Playgroud)

现在实现这个 onclick 监听器

  searchView.findViewById(R.id.search_close_btn)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                public void onClick(View v) {
                    Log.d("called","this is called.");
                    searchView.setQuery("",false);
                    searchView.setIconified(true);

                }
            });
Run Code Online (Sandbox Code Playgroud)

这对我有用。分享以便也可以帮助其他人。谢谢


lok*_*oko 2

好的。我错了。我们无法添加 searchCommand 并执行以下操作

setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)
Run Code Online (Sandbox Code Playgroud)

这样做会删除 searchText(如果有),因此我们无法执行 onClose()。