我正在开发一个简单的应用程序,它使用droidQuery发出网络请求以从各种网站获取公共流数据。该项目的要求包括支持API 8和具有ActionBar。而不是使用ActionBarSherlock,我想我会在android-support-v7-appcompat库中的兼容性ActionBar上试试运气。这在大多数情况下运行良好,但我在处理向上按钮以导航到以前的搜索(在公共流上搜索用户)时遇到了麻烦。这是我所拥有的:
请注意,这是一个精简版本,并且缺少一些方法(尽管我已经在我的代码中实现了它们)。
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
到 Activity的菜单:
<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,而不是更高 API 的原生 ActionBar。
我尝试过的事情包括单击应用程序图标不会触发 onOptionsItemSelected()(在关于支持库的答案中的评论之后),但这也没有成功。
我也偶然发现了电话getSupportActionBar().setHomeButtonEnabled(true)
,也没有结果。在进行一些测试时,似乎单击向上按钮不会向onOptionsItemSelected
.