Android: история поиска не отображается

Я пытаюсь получить представление поиска, чтобы отображать ранее введенные поисковые запросы, когда пользователь начинает печатать.

Я следовал всем инструкциям здесь, по адресу http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html и посмотрел в разных других местах, но, похоже, я не могу заставить его работать.

Я использую представление поиска для фрагмента в своем приложении, которое позволяет пользователям просматривать расписание автобусов для определенной остановки. Код ниже.

transit.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_search"
          android:title="Search"
          android:icon="@android:drawable/ic_menu_search"
          app:showAsAction="always"
          app:actionViewClass="android.support.v7.widget.SearchView"
          android:searchSuggestAuthority="com.teamzeta.sfu.utilities.BusSuggestionProvider"
          android:searchSuggestSelection=" ?"/>
</menu>

BusSuggestionProvider

package com.teamzeta.sfu.utilities;

import android.content.SearchRecentSuggestionsProvider;

public class BusSuggestionProvider extends SearchRecentSuggestionsProvider{
    public final static String AUTHORITY = "com.teamzeta.sfu.utilities.BusSuggestionProvider";
    public final static int MODE = DATABASE_MODE_QUERIES;

    public BusSuggestionProvider() {
        setupSuggestions(AUTHORITY, MODE);
    }
}

поиск.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="@string/stop_number"
    android:searchSuggestAuthority="com.teamzeta.sfu.utilities.BusSuggestionProvider"
    android:searchSuggestSelection=" ?">
</searchable>

NextBusFragment onCreateOptionsMenu

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.transit, menu);
        MenuItem searchViewItem = menu.findItem(R.id.action_search); 
        SearchView searchView = (SearchView) searchViewItem.getActionView();
        searchView.setIconifiedByDefault(false);
        searchView.setInputType(InputType.TYPE_CLASS_NUMBER);
        searchView.setQueryHint(getResources().getString(R.string.stop_number));
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                search(s);
                SearchRecentSuggestions suggestions = new SearchRecentSuggestions(getActivity(), BusSuggestionProvider.AUTHORITY, BusSuggestionProvider.MODE);
                suggestions.saveRecentQuery(s, null);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                return false;
            }
        });
    }

Поставщик манифеста

 <provider android:name="com.teamzeta.sfu.utilities.BusSuggestionProvider"
               android:authorities="com.teamzeta.sfu.utilities.BusSuggestionProvider" />
 <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable"/>

Метод search() срабатывает и извлекает список шин из API, а затем отображает его на экране в виде списка.

Может ли кто-нибудь понять, почему это не показывает историю?

Большое спасибо!


person SikhWarrior    schedule 10.11.2014    source источник
comment
Вы отлаживали onQueryTextSubmit? Является ли значение s правильным?   -  person MysticMagicϡ    schedule 10.11.2014
comment
Представленное значение является хорошим.   -  person SikhWarrior    schedule 10.11.2014
comment
Такая же проблема в 2020 году   -  person Aydinozkan    schedule 23.06.2020


Ответы (1)


Вам нужно установить свою активность как «доступную для поиска» в манифесте:

<activity>
...
<intent-filter>
    <action android:name="android.intent.action.SEARCH" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
person Sloosh    schedule 05.06.2015