我正在尝试正确实施SearchWidget
,但我遇到了一些问题。我重写onSearchRequested()
因为我需要将一些信息从调用Activity传递给执行查询的Activity
。
仅当SearchWidget
失去其“焦点”时才会发生。这就是我对“专注”SearchWidget
的意思:
如果我在SearchWidget
之外没有触摸的情况下进行搜索(并且焦点为SearchWidget
),则onSearchRequested()
被正确调用。
但是当我在SearchWidget
外触摸并且它失去焦点时,当我执行搜索时,方法onSearchRequested()
不会被调用。
这是onSearchRequested
的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbar_mainscreen, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
mSearchItem = menu.findItem(R.id.search);
mSearchView = (SearchView) mSearchItem.getActionView();
mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
mSearchView.setIconifiedByDefault(true);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.search:
onSearchRequested();
break;
case R.id.mainscreen_favorites:
Intent intent = new Intent(this, FavoritesActivity.class);
startActivity(intent);
break;
}
return true;
}
@Override
public boolean onSearchRequested() {
Bundle appData = new Bundle();
appData.putInt(Constants.EXTRA_CATEGORY, index);
startSearch(null, false, appData, false);
return true;
}
答案 0 :(得分:3)
我最后使用普通的Intent从SearchView.OnQueryTextListener开始我的搜索活动。
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
startSearch(query);
return true;
}
@Override
public boolean onQueryTextChange(final String s) {
return false;
}
});
private void startSearch(final String query) {
// Doesn't call through onSearchRequest
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(Keys.CATALOG, getCatalogID());
intent.putExtra(Keys.HAS_ARTICLES, hasArticles);
intent.putExtra(Keys.QUERY, query);
startActivity(intent);
}
答案 1 :(得分:1)
尝试添加:
mSearchView.setFocusable(false);