SearchView监听关闭正确方案

 SearchView往往需要在关闭的时候清除筛选的数据后加载全部数据,但是oncloseListener在高版本的andorid是不起作用的 ,正确的做法应该是取得searchview中那个close的按钮 即末尾的x按钮,监听点击事件即可

 //监听关闭按钮点击事件
        final ImageView mCloseButton = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
        if (mCloseButton.isClickable()) {
            mCloseButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //清除搜索框并加载默认数据
                    mSearchView.clearFocus();
                    mSearchView.onActionViewCollapsed();
                    datas.clear();
                    loadDatas(app.getDb());

                }
            });
        }

  其中clearFocus()和 onActionViewCollapsed()调用是为了让SearchView 关闭 ,如果反复搜索关闭出现输出法中没有搜索按钮的情况,可以在searchView获得焦点的时候调用mSearchView.onActionViewExpanded();即可正常操作

其余的比如通过MenuItem.setOnActionExpandListener在独立使用的时候并没有生效配合toolbar应该是可以的(未验证)

原文地址:https://www.cnblogs.com/yjpjy/p/10169542.html