Как свернуть SearchView на backpressed с помощью appcompat v7.?

Я использую appcompat v7 для поиска с панелью инструментов, кроме панели действий. ниже мой XML-файл меню и Java-файл.

файл меню:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always"/>
    <item
        android:id="@+id/action_sort"
        android:icon="@drawable/ic_action_sort"
        android:title="@string/sort"
        app:showAsAction="ifRoom"/>

</menu>

Java-файл:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.dashboard, menu);

         MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);


        if (searchItem != null) {
            searchView = (SearchView) searchItem.getActionView();
        }
        if (searchView != null) {
            searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
        }
            return super.onCreateOptionsMenu(menu);
    }

теперь я хочу свернуть поисковое представление, если оно развернуто, иначе хочу работать с backpressed() метод. как я могу достичь этого?

3 ответа

Решение

Свернуть на спине обрабатывается по умолчанию в моей собственной настройке. Я не реализовал пользовательский метод onBackPressed. Я не сделал ничего особенного, кроме расширения от ActionBarActivity.

Я использовал MenuItemCompat, чтобы получить actionview, который может помочь.

Это мое меню xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.yourapp.youractivity">

<item
    android:id="@+id/search"
    android:title="@string/app_name"
    android:icon="@drawable/nav_search"
    app:showAsAction="ifRoom|collapseActionView"
    app:actionViewClass="android.support.v7.widget.SearchView" />

</menu>

Вот как я создаю меню

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.shop_list, menu);

    SearchManager searchManager = 
                  (SearchManager)getSystemService(Context.SEARCH_SERVICE);

    //Using MenuItemCompat here, that can do the trick
    searchView = 
            (SearchView)MenuItemCompat.
                        getActionView(menu.findItem(R.id.search));

    searchView.setSearchableInfo(
            searchManager.getSearchableInfo(getComponentName()));

    //etc...
    //etc...

    return true;
}

В onBackPressed вызов invalidateOptionsMenu() или сохранить SearchView как Activity поле и вызов searchView.onActionViewCollapsed(); но это может потребовать дополнительной работы при восстановлении вашего Toolbar состояние (заголовок и т. д.).

Попробуйте это внутри класса и расширить ActionBarActivity в вашем классе (Пример: - публичный класс Home расширяется ActionBarActivity)

@Override
public void onBackPressed() {
    super.onBackPressed()
}

Для свертывания SearchView: Попробуйте это,

menu.collapseActionView();

(или же)

searchView = menuItem.getActionView().

(или же)

searchView.onActionViewCollapsed()
Другие вопросы по тегам