Я работаю над простым приложением, которое использует 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
.
Вы пытались добавить эти:.. 'GetSupportActionBar() setDisplayHomeAsUpEnabled (истина),' ' getSupportActionBar() setHomeButtonEnabled (истина);' – btse
@btse, я просто попробовал второй метод, но он все еще ничего не делал. Я также сделал некоторую отладку и обнаружил, что 'onOptionsItemSelected' даже не зарегистрирован, когда нажата кнопка« Домой ». – Phil
это странно. Я использую ABS вместо совместимости ActionBar ... возможно, это ошибка ... idk – btse