Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法获取android.support.v7.widget.SearchView以接受文本_Java_Android_Searchview_Android Toolbar - Fatal编程技术网

Java 无法获取android.support.v7.widget.SearchView以接受文本

Java 无法获取android.support.v7.widget.SearchView以接受文本,java,android,searchview,android-toolbar,Java,Android,Searchview,Android Toolbar,经过数小时的努力,我的支持工具栏中的支持搜索视图能够正常工作(它显示,显示提示文本,但拒绝接受文本),我不得不求助于您 我已经在谷歌上搜索了几个小时,在这里和其他网站上阅读了很多答案,查阅了很多文档和一篇关于这个主题的博客文章,但我无法孤立这个问题 正如我所说,我正在使用支持版本的SearchView和Toolbar以及MenuItemCompat。还有,动作性。我确保我虔诚地遵循所有步骤(在这个问题上有很多话要说,甚至是官方文件中的错误) 我已经正确设置了AndroidManifest.xml

经过数小时的努力,我的支持工具栏中的支持搜索视图能够正常工作(它显示,显示提示文本,但拒绝接受文本),我不得不求助于您

我已经在谷歌上搜索了几个小时,在这里和其他网站上阅读了很多答案,查阅了很多文档和一篇关于这个主题的博客文章,但我无法孤立这个问题

正如我所说,我正在使用支持版本的SearchView和Toolbar以及MenuItemCompat。还有,动作性。我确保我虔诚地遵循所有步骤(在这个问题上有很多话要说,甚至是官方文件中的错误)

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

还是没什么。我真的被难住了

以下是SearchView托管活动的OnCreateOptions菜单()

@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>

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

在浪费了8个小时之后,我想出了一个解决方案。我不确定这是一个多少黑客,但它的工作

我注意到SearchView中的EditText在聚焦方面表现得不稳定:它没有光标,而且,奇怪的是,当我拉下通知抽屉时,它似乎改变了焦点。我决定采用这个理论,即问题是SearchView中EditText的焦点,所以我去寻找EditText的android.R.id

经过寻找,我发现了。因此,我在SearchView中获得了对EditText的引用:

EditText searchField = (EditText) 
searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
然后我请求编辑文本的焦点:

searchField.requestFocus();
。。。突然之间,SearchView可以接受文本,所有相关的回调都能正常工作

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

invalidateOptionsMenu();
…在onResume()中,现在它可以完美地工作

不过,我必须说:这是一次非常奇怪的经历,因为我虔诚地遵循了这些步骤(不在官方的Android开发者指南中,它有很多错误),但仍然无法让SearchView编辑文本集中。我怀疑nav抽屉将重点放在活动创建上,也许这是问题的根源,但我还不确定

searchField.requestFocus();
invalidateOptionsMenu();