Конфигурация с возможностью поиска, возвращающая null для SearchView

Я создал интерфейс поиска, но не могу подключить SearchView в ActionBar к моему доступному для поиска файлу конфигурации. Когда я пытаюсь восстановить его в моем методе onCreateOptionsMenu, SearchManager.getSearchableInfo(getComponentName() возвращает значение null. Может ли кто-нибудь помочь мне с этим?

Settings.onCreateOptionsMenu(Меню)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_main, menu);

    SearchManager sm = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView sv = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    SearchableInfo info = sm.getSearchableInfo(getComponentName()); //This variable is returned as null                                                      
    sv.setSearchableInfo(info);
    sv.setIconifiedByDefault(false);
    sv.setSubmitButtonEnabled(true);
    return true;
}

Активность настроек в AndroidManifest.xml

<activity
        android:name=".Settings"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>

Действия с возможностью поиска в AndroidManifest.xml

 <activity
        android:name=".ImageSearch"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
    </activity>

У меня есть заголовок <?xml version="1.0" encoding="utf-8"?> в моем XML-файле меню, и я попытался очистить проект. Ни один из них, кажется, не делает трюк.


person Tanuj Nayak    schedule 31.12.2012    source источник
comment
возможный дубликат Не удается заставить работать поиск на панели действий   -  person Clint    schedule 04.07.2014


Ответы (3)


Хорошо, неважно. После некоторых исследований я обнаружил, что документация Android по созданию интерфейса поиска неполная: некоторые вещи были опущены, например

1) Ни одна строка не должна быть жестко закодирована в доступной для поиска конфигурации.

2) У меня должен быть этот код в <activity>, который выполняет поиск:

 <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/your search configuration file's name" />

3) Я также должен иметь этот код в <activity>, где я хочу, чтобы SearchView отображался в ActionBar

 <meta-data
            android:name="android.app.default_searchable"
            android:value=".ActivityWhichCarriesOutTheSearch" />

Для завершения: вот мой файл манифеста, который работает:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="false"
        android:theme="@style/AppTheme">
    <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data
                android:name="android.app.default_searchable"
                android:value=".SearchActivity" />
    </activity>
    <activity android:name=".SearchActivity"
            android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
                android:resource="@xml/searchable"/>
    </activity>
</application>
person Tanuj Nayak    schedule 01.01.2013
comment
К сожалению, это все еще не работает для меня. Моя поисковая активность просто не срабатывает! - person IgorGanapolsky; 12.09.2013
comment
Какое действие я должен указать как ".ActivityWhichCarriesOutTheSearch", если я хочу, чтобы кнопка поиска была доступна в каждом действии? - person Flame of udun; 07.10.2015

Если вы расширяете ActionBarActivity в своей mainactivtity, то в вашем menu_item вы должны преобразовать свое представление поиска в

"android.support.v7.widget.SearchView"

Я также получил ту же ошибку, используя это, которое я решил: спасибо ....

<item android:id="@+id/search"
android:title="Search for coupons,deals,stores,etc....."
android:icon="@drawable/ic_search"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView" />
person chaman    schedule 10.09.2015
comment
‹item android:id=@+id/search android:title=Поиск купонов, сделок, магазинов и т. д...... android:icon=@drawable/ic_search app:showAsAction=always app:actionViewClass=android.support. v7.widget.SearchView /› - person chaman; 10.09.2015

Я использую свойство android:launchMode="singleTop", когда у меня нет активности, которая выполняет поиск. И метаданные выглядят так:

<activity android:name=".Activities.Account" android:label="Личный кабинет абонента"
          android:screenOrientation="portrait"
          android:launchMode="singleTop"
        >
    <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable"/>
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
</activity>
person Peter Barbanyaga    schedule 03.04.2014