3

検索ウィジェットを使用して、アプリケーションに検索インターフェイスを実装しています。11未満のAPIレベル(Honeycomb)をサポートする予定はありません。onKeyDown()検索アクティビティでは、ユーザーが検索キーを押したときに検索ウィジェットを展開し、クエリテキストが送信されたときに最小化するようにオーバーライドしたいと思います。

これは、次のコマンドを呼び出すことで簡単に実行できます。

@Override
public boolean onSearchRequested() {
    if (mSearchMenuItem != null) {
        mSearchMenuItem.expandActionView();
    }
    return false;
}

クエリが送信されたとき:

searchView.setOnQueryTextListener(new OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {
            //Do nothing, results for the string supplied are already shown.
            //Just collapse search widget
            mSearchMenu.collapseActionView();
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            //do other stuff
             return false;
    });

問題は、折りたたみと展開の両方がAPIレベル14で導入されたことです。前述のように、APIレベル11までサポートを提供したいのですが、新しいAPIメソッドを呼び出さずに同じ機能を実現するのに問題があります。

私は試した:

@Override
public boolean onSearchRequested() {
    searchView.setIconifiedByDefault(false);
    //and also called
    searchView.requestFocusFromTouch();
}

しかし、それはまったく何もしませんでした(つまり、searchwidgetがすでに折りたたまれている場合は、折りたたまれたままです。

menuItemへの参照を保持しているので、次のことも試しました。

@Override
public boolean onSearchRequested() {
    SearchActivity.this.onOptionsItemSelected(mSearchMenuItem);
}

しかし、それもまったく何もしませんでした。最後に試したのは次のとおりです。

@Override
public boolean onSearchRequested() {
    searchMenu.getActionView().performClick();
    return false;
}

しかし、それもまた行きません。

互換性を犠牲にすることなく、同じ機能menuItem.collapseActionView()を提供するために私ができることについて何かアイデアはありますか?menuItem.expandActionView()

4

3 に答える 3

19

これは、SearchViewなどのActionViewを拡張するためのAPIレベル10で機能します

MenuItemCompat.expandActionView(mSearchMenuItem);
于 2014-01-28T10:38:03.073 に答える
1

MenuItemCompat静的メソッドを使用できます。例:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_search, menu);

    MenuItem menuItem = menu.findItem(R.id.action_search);
    MenuItemCompat.expandActionView(menuItem);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
    ...
}

詳細:http ://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html

于 2013-12-15T16:25:08.207 に答える
0

現在実行中のバージョンに応じて、ソリューションを差別化するオプションが常にあります。

int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
// pre honeycomb
} else {
// honeycomb and post
}

私はこれがあなたが探しているものと正確に一致しないかもしれないことを知っていますが、それはあなたにいくつかの方法を与えるかもしれません。

于 2013-02-27T14:56:43.310 に答える