简单Android SearchView功能不正常

简单Android SearchView功能不正常,android,searchview,Android,Searchview,我试着跟随android.com上的消息。我没有什么问题,我不确定我到底做错了什么。 如果你想看,这是文件 1-当我触摸搜索图标时,android:hint不可见。它是空的。为什么?如果我以编程方式设置它,它就会工作,例如searchView.setQueryHint(getString(R.string.search_hint))为什么它不能从XML工作? 2-当我触摸搜索图标时,搜索字段未获得焦点,键盘不会自动显示。我需要触摸搜索文本字段以获得焦点。我相信它应该自动聚焦 3-当我写东西并

我试着跟随android.com上的消息。我没有什么问题,我不确定我到底做错了什么。

如果你想看,这是文件

1-当我触摸搜索图标时,
android:hint
不可见。它是空的。为什么?如果我以编程方式设置它,它就会工作,例如
searchView.setQueryHint(getString(R.string.search_hint))为什么它不能从XML工作?

2-当我触摸搜索图标时,搜索字段未获得焦点,键盘不会自动显示。我需要触摸搜索文本字段以获得焦点。我相信它应该自动聚焦

3-当我写东西并触摸键盘上的搜索图标时。我没有在logcat窗口中看到任何日志条目。少了什么

4-(已解决)我尝试了XML中的android:iconifiedByDefault=“false”
,也尝试了searchView.setIconifiedByDefault(false)并且当我启动应用程序时,它总是被图标化。为什么会这样

  • 我发现我需要从
    app:showAsAction
    中删除
    collapseActionView
    ,否则
    setIconifiedByDefault(false)
    不起作用。另外,如果删除
    collapseActionView
    并设置
    setIconifiedByDefault(false)
    ,则它永远不会折叠
我猜我错过了什么地方,但我不确定到底是什么

下面是我遵循的步骤:

我在Android Studio 3中启动了一个新项目,其中包含“基本活动”。 中间有一个准备好的工具栏和“Hello World”。 然后,我在
xml
文件夹中添加了
searchable.xml
文件,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="Search hint text"
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer">
</searchable>
然后创建了一个简单的
SearchableActivity.class
。只是记录一些行

package com.test.myapplication;

import android.app.ListActivity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class SearchableActivity extends ListActivity {
    private static String TAG = SearchableActivity.class.getSimpleName();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d(TAG, "onCreate");
        super.onCreate(savedInstanceState);

        handleIntent(getIntent());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        handleIntent(intent);
    }

    private void handleIntent(Intent intent) {
        Log.d(TAG, "handleIntent");
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String query = intent.getStringExtra(SearchManager.QUERY);
            //use the query to search your data somehow
        }
    }
}
然后将必要的项目添加到现有的
菜单\u main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.test.myapplication.MainActivity">
    <item android:id="@+id/search"
        android:title="@string/app_name"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="android.widget.SearchView" />
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />
</menu>

更新:如果我改为
app:actionViewClass=“android.support.v7.widget.SearchView”
,如果我导入
import android.support.v7.widget.SearchView,也可以在
MainActivity.class
中更新然后当我单击搜索图标时,它显示默认的
search…
text自动获得焦点。但并没有显示来自XML的提示,在我提交任何信息时仍然并没有日志条目。

更新:

我意识到,如果我将
intent过滤器
meta
部分放在
MainActivity
下,我将在MainActivity中获得搜索意图。但我不明白为什么它不启动
SearchableActivity
。因为手册的页面上清楚地写着:

当用户从搜索对话框或小部件执行搜索时,系统将启动您的可搜索活动并向其发送操作\搜索意图

用这个

app:actionViewClass="android.support.v7.widget.SearchView"
而不是这个

app:actionViewClass="android.widget.SearchView"
用这个

app:actionViewClass="android.support.v7.widget.SearchView"
而不是这个

app:actionViewClass="android.widget.SearchView"

显然,我所需要做的就是从
onCreateOptions菜单()


显然,我所需要做的就是从
onCreateOptions菜单()


我试过了,它只是解决了一个问题。现在搜索字段获得焦点。@EvrenYurtesen试试这个
app:showAsAction=“collapseActionView”always“
它没有什么区别。我的理解是,
总是
意味着动作不会进入菜单。但是我发现我应该删除
collapseActionView
,它不会崩溃。无论如何最大的问题是,当我提交文本时,
SearchView
似乎没有做任何事情,我不明白为什么?@EvrenYurtesen对于测试用例使用
AppCompatActivity
,而不是
ListActivity
@EvrenYurtesen我下载了试图打开的项目,我尝试了,它只是解决了一个问题。现在搜索字段获得焦点。@EvrenYurtesen试试这个
app:showAsAction=“collapseActionView”always“
它没有什么区别。我的理解是,
总是
意味着动作不会进入菜单。但是我发现我应该删除
collapseActionView
,它不会崩溃。无论如何,最大的问题是当我提交文本时,
SearchView
似乎没有做任何事情,我不明白为什么?@EvrenYurtesen对于测试用例使用
AppCompatActivity
而不是
ListActivity
@EvrenYurtesen我下载了试图打开的项目