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

为什么设备旋转后已设置isIconified=false的SearchView仍处于图标化状态

问题原因

你代码的状态保存、文本恢复逻辑是正常的,查询可以触发就说明搜索文本已经被正确恢复。SearchView旋转后依旧保持图标化,是因为你单独修改isIconified属性没有和它绑定的上层MenuItem状态同步,另外SearchView本身的isIconified切换存在系统兼容问题,直接设置false经常不会触发展开。

修复方案

优先操作MenuItem的展开状态,比直接修改SearchView属性稳定性高很多,修改后的onCreateOptionsMenu代码如下:

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.menu_main_activity, menu)
    val searchItem = menu.findItem(R.id.item_search)
    searchView = searchItem.actionView as SearchView
    searchView.setOnQueryTextListener(QueryListener())
    if(!searchViewText.isNullOrEmpty()) {
        // 直接展开MenuItem,同步触发SearchView展开
        searchItem.expandActionView()
        // 遇到极端情况不展开可以加上下面两行重置状态
        // searchView.isIconified = true
        // searchView.isIconified = false
        searchView.setQuery(searchViewText, true)
        // 可选:不需要自动弹出输入法就加上这行
        searchView.clearFocus()
    }
    return super.onCreateOptionsMenu(menu)
}

如果你的menu_main_activity.xml中搜索项配置了app:showAsAction="always|collapseActionView"属性,这个方案可以完全解决展开失效的问题。

如果还要保持列表内容不变,只需要把列表的数据源也通过onSaveInstanceState保存,或者把数据源存到ViewModel中即可,不需要额外修改搜索相关逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:45:03