Как управлять стеком предыдущих поисков SearchView и получать к ним доступ с помощью кнопки «Вверх»?

Я работаю над простым приложением, которое использует droidQuery для выполнения сетевых запросов на получение общедоступных потоковых данных с различных веб-сайтов. . Требования проекта включают поддержку API 8 и наличие ActionBar. Вместо использования ActionBarSherlock я решил попытать счастья с совместимостью ActionBar в библиотеке android-support-v7-appcompat. По большей части это работает хорошо, но у меня возникают проблемы с нажатием кнопки Вверх для перехода к предыдущим поискам (которые ищут пользователей в общедоступных потоках). Вот что у меня есть:

Обратите внимание, что это урезанная версия, и некоторые методы отсутствуют (хотя я реализовал их в своем коде).

public class PublicStreamClient extends ActionBarActivity implements OnQueryTextListener, OnSuggestionListener, OnPullToRefreshListener {
    private Stack<SearchStackItem> previousSearches;//initialized in onCreate
    private class SearchStackItem {
        public String query;
        public SearchStackItem(String query) {
            this.query = query;
        }
    }

    //called when the user searches a network with the given string
    public void search(final String query, final boolean addToStack) {
        //do search using given query String
        //once completed successfully, add the search to the stack:
        previousSearches.add(new SearchStackItem(query));
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home: {
                Log.d(TAG, "Home Pressed");//Never reached!
                if (!previousSearches.isEmpty()) {
                    SearchStackItem search = previousSearches.pop();
                    search(search.query, false);
                    return true;
                }           
                break;
            }
            default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.reddit_client, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);

        searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setQueryHint("Search user name...");
        searchView.setOnQueryTextListener(this);
        searchView.setOnSuggestionListener(this);
        searchView.setBackgroundColor(Color.BLACK);
        setSuggestionsEnabled(true);//sets up the suggestions cursor

        searchView.setQuery("", false);
        search(null, false);

    return super.onCreateOptionsMenu(menu);
    }
}

Это мое меню XML, которое добавляет SearchView в активность:

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

    <item android:id="@+id/action_search"
          android:title="@string/action_search"
          android:icon="@android:drawable/ic_menu_search"
          rc:showAsAction="ifRoom|collapseActionView"
          rc:actionViewClass="android.support.v7.widget.SearchView" />

</menu>

Этот подход имеет большой логический смысл, однако, когда я нажимаю кнопку Вверх, SearchView просто закрывается, и я никогда не вижу вывод "Home Pressed". Что мне нужно сделать, чтобы заставить это работать правильно? Я ищу ответ, который использует совместимость ActionBar, а не ActionBarSherlock, а не собственный ActionBar для более высоких API.


Вещи, которые я пробовал, включают Нажатие значка приложения не вызывает onOptionsItemSelected() ( после комментария в ответе относительно библиотеки поддержки), но это тоже не помогло.

Я также наткнулся на вызов getSupportActionBar().setHomeButtonEnabled(true), который также не дал никаких результатов. При выполнении некоторых тестов кажется, что нажатие кнопки «вверх» не регистрирует обратный вызов onOptionsItemSelected.


person Phil    schedule 01.08.2013    source источник
comment
Пробовали ли вы добавить это: getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true);   -  person btse    schedule 02.08.2013
comment
@btse, я только что попробовал второй метод, но он все равно ничего не дал. Я также провел некоторую отладку и обнаружил, что onOptionsItemSelected даже не регистрируется при нажатии кнопки «Домой».   -  person Phil    schedule 02.08.2013
comment
странно. Я использую ABS вместо панели совместимости ActionBar... может быть, это ошибка... idk   -  person btse    schedule 02.08.2013
comment
Ты что-нибудь делаешь в своем onCreateOptionsMenu()?   -  person btse    schedule 02.08.2013
comment
@btse, я добавил соответствующие части onCreateOptionsMenu, которые инициализируют searchView.   -  person Phil    schedule 02.08.2013


Ответы (1)


Это была простая ошибка, связанная с неверными вызовами Stack.

previousSearches.add(new SearchStackItem(query));

Должны были быть

previousSearches.push(new SearchStackItem(query));
person Phil    schedule 07.08.2013