gpt4 book ai didi

java - 无法让 android.support.v7.widget.SearchView 接受文本

转载 作者:太空宇宙 更新时间:2023-11-03 10:18:52 24 4
gpt4 key购买 nike

在我的支持工具栏中尝试让 SearchView 正常工作数小时后(它出现,显示提示文本但拒绝接受文本),我不得不求助于您。

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

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

我已经正确设置了 AndroidManifest.xml 文件,我有一个 searchable.xml,据我所知,它被正确引用(我的意思是,提示文本通常显示在 SearchView 字段中),我有一个搜索在 list 中设置了 android.intent.action.SEARCH Intent 过滤器的结果 Activity 。

仍然没有。老实说,我被难住了。

这是 SearchView 托管 Activity 的 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:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/search_hint"
android:label="@string/search_title" >

</searchable>

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

<item
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 中。它甚至将 Intent 中识别的短语发送到搜索结果 Activity 。唯一的问题是我根本无法在文本字段中输入文本——那里甚至没有光标闪烁。尝试执行类似 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 获得焦点。我怀疑抽屉导航专注于 Activity 创建,也许这就是问题的根源,但我还不确定。

关于java - 无法让 android.support.v7.widget.SearchView 接受文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29223299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com