java无法读取方案文档,java – 无法获取android.support.v7.widget.SearchView接受文本

经过几个小时试图在我的支持工具栏中获得支持SearchView才能正常工作(它显示,显示提示文本但拒绝接受文本),我必须转向你.

我用谷歌搜索了几个小时,在这里和其他网站上阅读了很多答案,检查了很多文档和一个处理该主题的特定博客文章,但我无法隔离这个问题.

正如我所说,我使用的是SearchView和Toolbar以及MenuItemCompat的支持版本.另外,ActionBarActivity.我确保我虔诚地遵循了所有步骤(this blog post在这个主题上有很多话要说,甚至在官方文档中都有错误).

我已经正确设置了AndroidManifest.xml文件,我有一个searchable.xml,据我所知,正确引用(我的意思是,提示文本通常出现在SearchView字段中),我有一个搜索结果活动清单中设置的android.intent.action.SEARCH目标过滤器.

依然没有.老实说,我很难过.

这是SearchView托管活动的onCreateOptionsMenu():

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.menu, menu);

MenuItem search = menu.findItem(R.id.search);

searchView = (SearchView) MenuItemCompat.getActionView(search);

SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);

searchView.setSearchableInfo(searchManager

.getSearchableInfo(getComponentName()));

return true;

}

这里是res / xml中的searchable.xml:

android:hint="@string/search_hint"

android:label="@string/search_title" >

最后,这是res / menu中的menu.xml文件:

android:id="@+id/search"

android:icon="@drawable/ic_search_white_18dp"

android:title="@string/search_title"

myappname:actionViewClass="android.support.v7.widget.SearchView"

myappname:showAsAction="ifRoom|collapseActionView"/>

(显然myappname在这里替换了我的真实应用名称).

奇怪的是,添加后语音搜索工作正常

android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"

在searchable.xml中.它甚至将意图中的已识别短语发送到搜索结果活动.唯一的问题是我根本无法在文本字段中输入文本 – 甚至没有光标在那里闪烁.尝试执行searchView.requestFocus()之类的操作没有结果.

解决方法:

在浪费了8个小时之后,我想出了一个解决方案.我不确定它有多大,但是它有效.

我注意到,就聚焦而言,SearchView中的EditText行为不正常:它没有光标,奇怪的是,当我拉下通知抽屉时,它似乎改变了焦点.我决定采用的理论是问题是SearchView内部EditText的重点,所以我去寻找EditText的android.R.id.

搜索之后,我遇到了this answer.所以我在SearchView中引用了EditText:

EditText searchField = (EditText)

searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);

然后我请求焦点为EditText:

searchField.requestFocus();

…突然,SearchView可以接受文本,所有相关的回调都在工作!

我只剩下一个问题:当调用onPause()时,我的解决方案因EditText失去焦点而停止工作.所以我刚补充说:

invalidateOptionsMenu();

…在onResume()中,现在它完美无缺.

不过我必须说:这是一个非常奇怪的经历,因为我虔诚地遵循了这些步骤(不是在官方的Android开发者指南中,它有很多错误),但仍然无法让SearchView EditText成为焦点.我怀疑导航抽屉是否关注活动的创建,也许这是问题的根源,但我还不确定.

标签:java,android,android-toolbar,searchview

来源: https://codeday.me/bug/20190702/1360938.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值