需要为按钮确定正确的 searchVIew 监听器方法以准备关闭 searchView

Need to identify correct searchVIew Listener method for button to prepare to close searchView

需要获得正确的 searchView 侦听器方法来放置我的代码,以更改我擦除键入的搜索结果(圆形 X)按钮,使其成为完全关闭 searchView 的白色(X)按钮。

这是我在操作栏中创建 searchView 的代码:

@Override
public boolean onCreateOptionsMenu(final Menu menu) {

 MenuItem item =menu.findItem(menuSearch);
    final  SearchView searchView = (SearchView) item.getActionView();

在第一张图片中,当我点击搜索图标时,会弹出以下内容以及我的代码:

    searchView.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

     ImageView searchClose = searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
            searchClose.setImageResource(R.drawable.ic_close_black_24dp);

        }
    });

因此您可以单击上面的 (X) 并关闭 searchView。或者您可以开始在键盘上键入以进行搜索,您会得到以下信息:现在请注意 (X) 变成了一个(圆形 X),这意味着删除您在键盘上键入的内容。

这是上面的代码:

       @Override
        public boolean onQueryTextChange(String newText) {


            ImageView searchCancel = searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
            searchCancel.setImageResource(R.drawable.ic_cancel_black_24dp);


            return false;
        }
    });

现在,如果我再次单击那个(圆形 X),我需要它回到原来的白色 (X) 才能完全关闭 searchView。所以我需要再次使用 R.drawable.ic_close_black_24dp 的第一个代码。

它不适用于以下方法:

   searchView.setOnQueryTextListener
   searchView.setOnCloseListener

我知道正确的代码,只是缺少正确的 searchView Listener 方法。单击(圆形 X)时,我使用哪种监听器方法将(圆形 X)变回白色(X)。

(我希望我解释得很透彻,如果没有,我希望我的 searchView 像在 Snapchat 中一样工作,你会看到它使用 2 个不同的 X,一个用于删除用户键入的内容,一个用于关闭 searchView完全)。

所以我只需要正确的 Listener 方法来使用而不是方法内部的代码。

onQueryTextChange() 在使用零长度字符串取消输入时调用。本质上,您要显示的一种类型 "X" 是长度为零长度,否则为另一种类型。像这样:

@Override
public boolean onQueryTextChange(String newText) {
    ImageView searchCancel =
            searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
    searchCancel.setImageResource(
            (newText.length() > 0)
            ? R.drawable.ic_cancel_black_24dp:
            : R.drawable.[the other type of "X"]);
    return false;
}