扩展后如何检测工具栏搜索视图上的点击?

How to detect clicks on toolbar searchview after it's expanded?

mSearchView.setOnSearchClickListener {
    // do something
}

当我点击 scrollView 的图标时会被调用,但是如果我在搜索框中写了一些东西并且有一些文本然后点击搜索框那么这个监听器将不会被调用.

更新

mSearchView.setOnSearchClickListener {
    scrollView.smoothScrollTo(0, 0)
}

我想在用户单击 SearchView 时实现滚动到顶部的行为。它只工作图标是可见的,但如果 SearchView 展开,我不知道该怎么做。

实际上,第一次点击 SearchView 是点击 SearchView 本身;但是一旦 SearchView 通过第一次点击展开(即隐藏搜索图标),那么下一次点击事件就不会被 SearchView 本身检测到,而是被其底层 [=15 检测到=].

您可以使用以下代码段访问 SearchView 的底层 AutoCompleteTextView,然后使用其 setOnClickListener 执行与 [=19= 中相同的代码]

val autoCompleteTextViewId = 
         mSearchView.context.resources
        .getIdentifier("android:id/search_src_text", null, null)

val searchAutoCompleteTextView =
    mSearchView.findViewById<AutoCompleteTextView>(autoCompleteTextViewID)

searchAutoCompleteTextView.setOnClickListener {
     // Do the same as you want to do as in `mSearchView.setOnSearchClickListener`
     scrollView.smoothScrollTo(0, 0)
}

我可以使用 Zain 想法和另一个 post 的示例来解决我的问题:

我还必须编写一个 onFocusChangeListener,因为 setOnClickListener 仅在 AutoCompleteTextView 获得焦点时触发。

val autoCompleteTextViewId = mSearchView.context.resources.
getIdentifier("android:id/search_src_text", null, null)
val searchAutoCompleteTextView =
    mSearchView.findViewById<AutoCompleteTextView>(autoCompleteTextViewId)

searchAutoCompleteTextView?.setOnClickListener {
    memoriesScrollView.smoothScrollTo(0, 0)
}

searchAutoCompleteTextView?.setOnFocusChangeListener { v, hasFocus ->
    if(hasFocus) {
        memoriesScrollView.smoothScrollTo(0, 0)
    }
}