11

SearchViewアプリで検索できるようにウィジェットを使用しています。検索アイコンを最初にクリックすると、SearchViewウィジェットが検索フィールドに展開され、アプリケーション アイコンの横に「戻る」矢印が表示されます。アプリケーション アイコンをクリックすると、アクション バーが初期状態 (「戻る」矢印なし) にSearchView戻り、アイコンに戻ります。

問題は、検索が実行された後、アクション バーが変化せず、元に戻す唯一の方法は、アプリケーション アイコンまたは電話の「戻る」矢印をクリックすることです。検索が終わったらアクションバーを初期状態にしたいので良くない。私は試しSearchView.setIconofied(true)ましたが、2つの問題があります:

  1. 検索アイコンは、編集フィールドと同じ場所に表示されます (元は右端にあります)。
  2. アクションバーには引き続き「戻る」矢印が表示されます。

私が直面している問題は、通常のナビゲーション パターンから逸脱した結果だと思います。私の場合、すべてが同じアクティビティ内で発生しています (検索結果は、アクション バーをホストする同じアクティビティに表示されます)。たとえば、実行するActivity.finish()とアプリが終了します。

アクションバーの「1 ステップ戻る」をトリガーするにはどうすればよいですか? または、アプリケーション アイコンのクリックをシミュレートしますか?

4

2 に答える 2

37

これをMenuItemの折りたたみ可能なアクションビューとして設定したようです。そのMenuItemインスタンスでcollapseActionView()を呼び出して、閉じた状態に戻すことができます。

于 2012-05-05T19:09:59.560 に答える
1

メソッドcollapseActionView()は API レベル 14 からのみ機能します。以前のバージョンの Android のサポートを検討している場合は、MenuItemCompatライブラリを使用する必要があります。

検索ビューを折りたたんでアクションバーをリセットする私の解決策は次のとおりです...

private MenuItem searchMenuItem;

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main_menu, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchMenuItem = menu.findItem(R.id.action_search);
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);

    customizeSearchView(searchView);

    return super.onCreateOptionsMenu(menu);
}




    @Override
protected void onNewIntent(Intent intent)
{
    setIntent(intent);

    if (searchMenuItem != null)
    {
        if (MenuItemCompat.expandActionView(searchMenuItem))
        {
            MenuItemCompat.collapseActionView(searchMenuItem);
        }
        else if (MenuItemCompat.collapseActionView(searchMenuItem))
        {
            MenuItemCompat.expandActionView(searchMenuItem);
        }
    }

    handleIntent(intent);
}
于 2014-02-28T14:25:26.550 に答える