web-dev-qa-db-ja.com

SearchViewをプログラムで開くにはどうすればよいですか?

「SearchView」と呼ばれるActionBar用のこのウィジェットがあります。使用されていないときは、次のようになります。

enter image description here

そして、それが使用中の場合、次のようになります。

enter image description here

私は(もちろん、プログラムで)検索ビューを開きます(「使用中」にします)。

次のようないくつかの機能を試しました。

SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setOnQueryTextListener(this);

    searchView.performClick();
    searchView.requestFocus();

しかし、それらのどれも働いていません...

XMLのSearchView:

<item Android:id="@+id/menu_search"
      Android:title="Search"
      Android:icon="@drawable/ic_action_search"
      Android:showAsAction="ifRoom|collapseActionView"
      Android:actionViewClass="Android.widget.SearchView" />
96
Eli Revah

SearchViewを展開するには

searchView.setIconified(false);

とそれを折りたたみます

searchView.setIconified(true);

Android:showAsActionの値をifRoom|collapseActionViewからalwaysに変更する必要があります。 SearchViewの属性Android:iconifiedByDefaultは、デフォルト値であるtrueである必要があります。そうでない場合、ユーザーはプログラムで展開した後、SearchViewを折りたたむことができません。

236

ActionViewのonActionViewExpanded()ではなく、MenuItemのexpandActionView()を呼び出してみてください。

わたしにはできる。

MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchMenuItem.expandActionView();
68
qbait

必要な場合にのみサポートライブラリを使用する場合は、これを実行します

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    if (Utils.hasIceCreamSandwich())
        searchMenuItem.expandActionView();
    else MenuItemCompat.expandActionView(searchMenuItem);

それ以外の場合は単にこれを行う

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    MenuItemCompat.expandActionView(searchMenuItem);
13
Olayinka

私はこれが遅いことを知っていますが、

ExpandActionView()を呼び出して開き、collapseActionView()を呼び出して閉じてみてください。 getActionView()を介して実際のアクションビューでrequestFocus()を呼び出して、検索ビューにフォーカスを与えることができます:)

6
James Campbell