Android: кнопка поиска на панели действий

Я попытался реализовать панель действий с полем поиска на основе официального руководства по Android (http://developer.android.com/training/search/setup.html)

Вот мои файлы:

Файл манифеста:

  <application
...
  android:theme="@style/Theme.AppCompat.Light" >

 <activity
            android:name=".activities.MainActivity"
            android:label="@string/title_activity_main" >
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>

   <activity
        android:name=".activities.SearchActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden" >
          <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
    </activity>

...

</application>

(метаданные присутствуют)

Основная деятельность:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

     // Inflate the menu; this adds items to the action bar if it is present.
     MenuInflater inflater = getMenuInflater();
     inflater.inflate(R.menu.action_bar_menu, menu);

    //Searchable configuration
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();    //MenuItemCompat.
    searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName()));

    return super.onCreateOptionsMenu(menu);

}

action_bar_menu.xml :

<item
    android:id="@+id/search"
    android:icon="@drawable/ic_action_search"
    android:title="@string/menu_search"
    yourapp:actionViewClass="android.support.v7.widget.SearchView"
    yourapp:showAsAction="always"/>

res/xml/searchable.xml:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="my hint"
    android:label="@string/app_name" />

Отображается панель действий и кнопка поиска. Я могу вводить данные, но при нажатии на кнопку поиска (виртуальная клавиатура) ничего не добавляется.

Любые идеи ? Спасибо


person johann    schedule 21.01.2014    source источник


Ответы (2)


Используйте этот код

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_sky_reader_android, menu);

    SearchView mSearchView = (SearchView) menu.findItem(R.id.menu_search);
    setupSearchView(mSearchView);
    return true;

}


private void setupSearchView(final MenuItem searchItem) {

    searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM
                | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW );
    mSearchView.setOnQueryTextListener(new OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {
            // TODO Auto-generated method stub

            return true;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            // TODO Auto-generated method stub
            return true;
        }
    });
}
person henry4343    schedule 21.01.2014
comment
Спасибо за ваш ответ. Он работает с setOnQueryListener, но я хотел бы использовать android.intent.action.SEARCH. - person johann; 21.01.2014

Метка для поиска должна быть такой же, как у действия, попробуйте это

в манифесте

<activity
        android:name=".activities.SearchActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:label="@string/app_search"
        android:windowSoftInputMode="stateHidden" >
          <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
    </activity>

В поиске

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="my hint"
    android:label="@string/app_search" />

Надеюсь, что это работает

person cfontanet    schedule 10.07.2014