0

正しく実装しようとしてSearchWidgetいますが、いくつかの問題に直面しています。onSearchRequested()呼び出し元のアクティビティからActivityクエリを実行するアクティビティにいくつかの情報を渡す必要があるため、オーバーライドします。

SearchWidgetが「フォーカス」を失った場合にのみ発生します。これが「focused」の意味です。SearchWidget外側
フォーカス検索ウィジェット
に触れずに検索するSearchWidgetと(したがって focused でSearchWidgetonSearchRequested()正しく呼び出されます。 しかし、外側に触れSearchWidgetてフォーカスを失うと、検索を実行するとメソッドonSearchRequested()が呼び出されません。
フォーカスのない SearchWidget

これはのコードです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;
}
4

2 に答える 2

3

通常のインテントを使用して、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);
  }
于 2012-12-06T14:23:45.047 に答える
1

追加してみてください:

mSearchView.setFocusable(false);
于 2012-05-01T15:41:40.727 に答える