You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过菜单项在MaterialToolbar中实现SearchView,提交查询无响应如何解决

修复方案

1. 绑定MaterialToolbar到ActionBar

你没有将布局中的MaterialToolbar设置为Activity的支持ActionBar,导致菜单加载逻辑onCreateOptionsMenu没有和Toolbar的实际菜单绑定,你写的搜索监听逻辑没有挂载到真实渲染的SearchView上。
在MainActivity的onCreate方法中添加如下代码:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    // 新增以下代码
    val toolbar = findViewById<MaterialToolbar>(R.id.nav_drawer)
    setSupportActionBar(toolbar)
}

2. 检查SearchView导包一致性

确保MainActivity中导入的SearchView和menu.xml中声明的类一致,必须是AndroidX版本的SearchView:

import androidx.appcompat.widget.SearchView

不要导入系统原生的android.widget.SearchView,两者类型不匹配会导致监听不生效。

3. 修改onCreateOptionsMenu返回值

你当前方法最后返回的是父类的返回值,若父类返回false会导致自定义菜单配置失效,直接返回true即可,修改后的完整代码如下:

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.top_app_bar, menu)
    val searchItem = menu?.findItem(R.id.top_nav_search)
    if(searchItem != null){
        val searchView = searchItem.actionView as SearchView
        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
            override fun onQueryTextSubmit(query: String?): Boolean {
                Toast.makeText(this@MainActivity, "Looking for $query", Toast.LENGTH_SHORT).show()
                // 可选:提交后收起搜索框
                searchView.clearFocus()
                searchItem.collapseActionView()
                return true
            }
            override fun onQueryTextChange(newText: String?): Boolean {
                return true
            }
        })
    }
    // 修改返回值为true
    return true
}

完成以上修改后重新运行即可触发搜索提交的Toast逻辑。

内容的提问来源于stack exchange,提问作者Jay Garzon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:36:02