SearchView onSearchClickListener not working



我在上设置了SearchView

android:iconifiedByDefault="false";

我想跟踪用户第一次打开搜索栏的时间(键盘弹出的那一刻(

这不起作用:

searchView = findViewById(R.id.search_bar);
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("###", "Clicked");
}
});

上面的代码只有在搜索栏被图标化时才有效。我不想要一个图标化的搜索栏,我的搜索栏应该像带有queryHint的Instagram搜索栏一样;在此处搜索">

这是我的XML:

<androidx.appcompat.widget.SearchView
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
app:defaultQueryHint="Search here"/>

我做错了什么?

编辑

我还尝试实现onTouchListener:

searchView = findViewById(R.id.search_bar);
searchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i("###", "Clicked ");
return true;
}
});

但它是一样的,只有当点击搜索图标时才有效。

尝试setOnTouchListener这里我提供的是kotlin代码,您也可以在java中实现类似的代码。

searchView.setOnTouchListener(object : View.OnTouchListener{
override fun onTouch(v : View?, event : MotionEvent?) : Boolean {
Log.i("tag","test")
return  true
}
})

我建议尝试setOnFocusChangeListener,并在searchView中将可聚焦属性设置为true

代码(它是Kotlin-我没有java文件rn,但你可以很容易地自动转换它。我尽可能地保持它像java一样(:

searchView?.setOnFocusChangeListener(object: View.OnFocusChangeListener {
override fun onFocusChange(v: View?, hasFocus: Boolean) {
// do fancy stuff
}
})

和xml:

<androidx.appcompat.widget.SearchView
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:focusable="true"
app:defaultQueryHint="Search here"/>

此外,还有一点需要注意的是:尽管它与问题无关,但很多人可能会被这个问题绊倒,困惑于为什么当你开始搜索时onSearchClick没有被执行:函数setOnQueryTextListener因此存在。当你想注册文本中的更改时,你也可以使用它,而不仅仅是打开键盘。

相关内容

  • 没有找到相关文章

最新更新