Поисковая активность Android не начинается

Мое окно поиска не отображается, когда я нажимаю кнопку поиска на своем телефоне 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

Ошибка ниже была исправлена ​​благодаря @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));
    }
}

доступный для поиска.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>

person Rijvi Rajib    schedule 21.04.2011    source источник
comment
Привет всем, кто новичок в разработке Android. Я пытаюсь реализовать концепцию панели поиска в своем приложении, но не могу реализовать. Вот ссылка, по которой я разместил свой код с моей проблемой stackoverflow.com/questions/16515964/   -  person KAREEM MAHAMMED    schedule 13.05.2013


Ответы (2)


Я столкнулся с той же проблемой. Значение для android: label должно быть строковым ресурсом. Строки жесткого кодирования не будут работать.

person dinidu    schedule 29.04.2011

В сообщении об ошибке говорится, что «метка поиска должна быть ссылкой на ресурс».

So

<searchable
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:label="Redacted" 

неправильно и лучше читать

<searchable
   xmlns:android="http://schemas.android.com/apk/res/android" 
   android:label="@string/Redacted" 

А затем добавьте запись «Отредактировано» в strings.xml.

Ваш манифест показывает

android:value="SearchActivity" />

Разве это не должно быть

android:value=".SearchActivity" />
person Heiko Rupp    schedule 21.04.2011
comment
Спасибо, Хайко, это устранило предупреждение, но панель поиска по-прежнему не отображается. - person Rijvi Rajib; 21.04.2011
comment
ни .searchactivity, ни searchactivity в моем случае не работают, и yes label является строковым ресурсом - person Akhil Jain; 05.02.2013