0

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

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

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> 

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


вещи я попытался включить Clicking app icon doesn't trigger onOptionsItemSelected() (следующий комментарий в ответ о библиотеке поддержки), но это тоже не сделать трюк.

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

+0

Вы пытались добавить эти:.. 'GetSupportActionBar() setDisplayHomeAsUpEnabled (истина),' ' getSupportActionBar() setHomeButtonEnabled (истина);' – btse

+0

@btse, я просто попробовал второй метод, но он все еще ничего не делал. Я также сделал некоторую отладку и обнаружил, что 'onOptionsItemSelected' даже не зарегистрирован, когда нажата кнопка« Домой ». – Phil

+0

это странно. Я использую ABS вместо совместимости ActionBar ... возможно, это ошибка ... idk – btse

ответ

1

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

previousSearches.add(new SearchStackItem(query)); 

Должно быть

previousSearches.push(new SearchStackItem(query));