Android 搜索 Activity 未启动

标签 android android-layout android-manifest android-searchmanager

当我按下 Android 手机上的搜索按钮时,我的搜索框没有显示。我想要做的是执行 ASyncTask(或后台任务)以获取字符串数组(人名)的 JSON 响应,搜索结果,并使用 IMDB 具有的相同搜索功能将其显示给用户。目前,我正在使用字符串数组来测试我的搜索响应/请求。有什么想法吗?

我在按下搜索按钮时收到以下警告(但我认为这与我的问题无关):

04-21 03:35:23.767: WARN/KeyCharacterMap(12946): Can't open keycharmap file
04-21 03:36:48.978: WARN/KeyCharacterMap(12999): Error loading keycharmap file '/system/usr/keychars/qtouch-touchscreen.kcm.bin'. hw.keyboards.65537.devname='qtouch-touchscreen'
04-21 03:37:21.408: WARN/KeyCharacterMap(2576): Using default keymap: /system/usr/keychars/qwerty.kcm.bin

The error below has been fixed courtesy of @Heiko Rupp:

04-21 03:17:51.994: WARN/SearchableInfo(1293): Invalid searchable metadata for com.redacted/.SearchActivity: Search label must be a resource reference.

SearchActivity.java:

package com.redacted;

import android.app.ListActivity;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class SearchActivity extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search_results);
        handleIntent(getIntent());
    }

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

    private void handleIntent(Intent intent) {
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String query = intent.getStringExtra(SearchManager.QUERY);
            showResults(query);
        }
    }

    private void showResults(String q) {
        String[] listItems = { "test", "my", "search", "list" };

        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, listItems));
    }
}

searchable.xml:

<?xml version="1.0" encoding="utf-8"?>
<searchable
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:searchButtonText="Search" 
  android:label="Redacted" 
  android:hint="Redacted"
  android:voiceSearchMode="showVoiceSearchButton|launchRecognizer">
</searchable>

Manifest Manifest.xml 的一部分(元数据在标签内,因此它是全局的):

<activity android:launchMode="singleTop" android:name="SearchActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <meta-data android:name="android.app.searchable" 
                android:resource="@xml/searchable"/>
        </activity>
        <meta-data android:name="android.app.default_searchable"
            android:value="SearchActivity" />
    </application>

search_results.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <ListView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/list"></ListView>
</LinearLayout>

最佳答案

我遇到了同样的问题。android:label 的值必须是字符串资源。硬编码字符串不会起作用。

关于Android 搜索 Activity 未启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5740893/

相关文章:

android - 有没有办法在 CollapsingToolBarLayout 中正确锚定 ImageView ?

java - 如何从服务中关闭 Activity (finish())?

android - 更新 Android 应用程序时如何访问数据目录,其中我已更改 list 中的包

android - 预期为 BEGIN_ARRAY 但在第 1 行第 2 列路径 $ - Retrofit 2 Android 中为 BEGIN_OBJECT

android - 为 Android 构建内核模块

android - 将音频流式传输到 Android 电话

android - 在 Native Extension 中创建的 Pending Intent 仅适用于 Notification,但不适用于 Service

android - 如何显示全屏 TYPE_SYSTEM_ALERT 窗口?

android - 在维度中分配包装内容

android - FirebaseCrashlytics.getInstance() 在多进程应用程序中崩溃应用程序