13

API 8 アプリで使用しようとしてSearchViewCompatいます。ActionBarSherlock

public boolean onCreateOptionsMenu(Menu menu) {
    MenuItem item = menu.add("Search")
        .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search)
        .setActionView(R.layout.collapsible_edittext);
    item.setShowAsAction(
        MenuItem.SHOW_AS_ACTION_ALWAYS | 
        MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

    // To use SearchViewCompat, I need to add it to the Menu item as well:
    View searchView = SearchViewCompat.newSearchView(this);
    // ...
    SearchViewCompat.setOnQueryTextListener(...);
    // ...
    item.setActionView(searchView);

上部と下部の両方のコードで を呼び出す必要があることに注意してくださいsetActionView()。検索できないということでしょうか?

4

4 に答える 4

6

ActionBarSherlock ライブラリ バージョン 4.2 を使用している場合は、API 11 SearchView ウィジェットを ActionBarSherlock SearchView ウィジェットに置き換えて、下位互換性を持たせることができます。

search.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/description_search"
        android:orderInCategory="0"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        android:showAsAction="ifRoom|collapseActionView" /> 
</menu>

活動クラス

//IMPORTANT!!!
import com.actionbarsherlock.widget.SearchView;

...

@Override 
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getSupportMenuInflater().inflate(R.menu.search, menu);
    setupSearchMenuItem(menu);
    return true;
}

private void setupSearchMenuItem(Menu menu) {
    MenuItem searchItem = menu.findItem(R.id.menu_search);
    if (searchItem != null) {
        SearchView searchView = (SearchView) searchItem.getActionView();
        if (searchView != null) {
            SearchManager searchManager = 
                 (SearchManager) getSystemService(SEARCH_SERVICE);
            searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));
            }
        }
    }
}
于 2013-03-18T13:19:59.690 に答える
2

実際の問題は何ですか?ウィジェットが存在しないため、HC 以前のデバイスに対してSearchViewCompat返されます。これは、HC SearchView を模倣する独自のカスタム アクション ビューを提供する必要があることを意味します。nullSearchView

SearchViewコンポーネントを Android ソースからバックポートして使用することもできます。

それ以外の場合は、Android にある既存の検索インターフェイスをそのまま使用できます。この場合、HC+ デバイスの場合はアクション ビューを使用して検索を実行しますが、Froyo および Gingerbread デバイスでは、ユーザーが検索アイコンをクリックすると、検索バーが上部からアニメーション化されます。

お役に立てれば。

于 2012-09-10T05:33:55.710 に答える