8

ActionbarSherlockSearchViewを ActionBar に追加しようとすると、アクティビティが表示されるとすぐにアプリケーションがクラッシュします。この理由として、LogCat で次のことがわかりました。

10-22 21:22:51.070: W/MenuInflater(21873): Cannot instantiate class: com.actionbarsherlock.widget.SearchView
...
10-22 21:22:51.070: W/MenuInflater(21873): Caused by: java.lang.reflect.InvocationTargetException
10-22 21:22:51.070: W/MenuInflater(21873):  at java.lang.reflect.Constructor.constructNative(Native Method)
10-22 21:22:51.070: W/MenuInflater(21873):  at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
10-22 21:22:51.070: W/MenuInflater(21873):  at android.view.LayoutInflater.createView(LayoutInflater.java:587)
10-22 21:22:51.070: W/MenuInflater(21873):  ... 32 more
10-22 21:22:51.070: W/MenuInflater(21873): Caused by: android.content.res.Resources$NotFoundException: Resource is not a ColorStateList (color or path): TypedValue{t=0x2/d=0x7f01001f a=-1}
10-22 21:22:51.070: W/MenuInflater(21873):  at android.content.res.Resources.loadColorStateList(Resources.java:2035)
10-22 21:22:51.070: W/MenuInflater(21873):  at android.content.res.TypedArray.getColorStateList(TypedArray.java:342)
10-22 21:22:51.070: W/MenuInflater(21873):  at android.widget.TextView.<init>(TextView.java:768)
10-22 21:22:51.070: W/MenuInflater(21873):  at android.widget.TextView.<init>(TextView.java:442)

レギュラーを使用するandroid.widget.SearchViewと、android:actionViewClassすべてが正常に機能します。Android Web サイトのチュートリアルに従いました。

これは私のメニューxmlです

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/menu_search"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        android:icon="@drawable/ic_action_search"
        android:showAsAction="ifRoom|collapseActionView"
        android:title="@string/menu_search"/>

    <item android:id="@+id/menu_add_page"
        android:title="@string/menu_add_page"
        android:icon="@drawable/ic_action_add"
        android:showAsAction="always" />

    <item android:id="@+id/menu_settings"
        android:title="@string/menu_settings"
        android:showAsAction="never" />
</menu>

そして、これは関連するコードです:

public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.activity_overview, menu);

    // Get the SearchView and set the searchable configuration
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    return true;
}

これは (既知の) バグですか、それとも他に何か不足していますか?

4

5 に答える 5

3

この問題は、v-14 バージョンの Sherlock テーマに特定の属性がないために発生します。

を追加して修正しました

<item name="textColorPrimary">@color/abs__primary_text_holo_light</item>
<item name="textColorPrimaryInverse">@color/abs__primary_text_holo_dark</item>

Sherlock のテーマに合わせて、再び美しく動作します。理想的な解決策かどうかはわかりませんが、今のところ機能します:)

于 2012-12-19T08:56:13.600 に答える
2

SearchViewin ActionbarSherlockis / は既知の問題でした。devブランチにはサポートが含まれていますが、完全ではなく、提案に関する問題がまだ残っているようです。

参照については、 github hereおよびhereを参照してください。

ActionBarSherlock>ソースへのリンクはこちらSearchView

于 2012-10-22T20:56:21.257 に答える
1

hahnjoがここで述べたように:

テーマTheme.Sherlock.Light.DarkActionBarを使用して でビューを作成するとnew SearchView(this)、機能しません... 機能する組み合わせ: Theme.Sherlock.Light.DarkActionBarwithnew SearchView(getSupportActionBar().getThemedContext()) Theme.Sherlock.LightまたはTheme.Sherlock.Lightwithnew SearchView(this)

于 2013-03-22T11:09:41.577 に答える
0

android:theme私もこのエラーを受け取りましたが、これは の<application>ノードで を設定していなかったためAndroidManifest.xmlです。

ノード に設定android:theme="@style/Theme.Sherlock"すると、問題は解決しました。<application>

于 2013-02-21T14:13:58.127 に答える
0

これを機能させるには、次のすべてを実行する必要があることがわかりました。

AndroidManifest.xml でアプリケーション テーマが設定されていることを確認します。

<application android:name="com.xxx.MyApplication" android:theme="@style/AppTheme">

「不足している」設定を基本スタイルに追加しました。

<style>
    <item name="textColorPrimary">@color/abs__primary_text_holo_light</item>
    <item name="textColorPrimaryInverse">@color/abs__primary_text_holo_dark</item>
    <item name="searchDropdownBackground">@drawable/abs__search_dropdown_dark</item>
    <item name="searchViewTextField">@drawable/abs__textfield_searchview_holo_dark</item>
    <item name="searchViewTextFieldRight">@drawable/abs__textfield_searchview_right_holo_dark</item>
    <item name="searchViewCloseIcon">@drawable/abs__ic_clear</item>
    <item name="searchViewSearchIcon">@drawable/abs__ic_search</item>
    <item name="searchViewGoIcon">@drawable/abs__ic_go</item>
    <item name="searchViewVoiceIcon">@drawable/abs__ic_voice_search</item>
    <item name="searchAutoCompleteTextView">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
 </style>

次に、Activity.onCreateOptionsMenu() を更新して、次のような「テーマ コンテキスト」をメニュー インフレータに渡します。

@Override
public boolean onCreateOptionsMenu(final Menu menu)
{
    final MenuInflater inflater = new MenuInflater(this.getSupportActionBar().getThemedContext());
    inflater.inflate(R.menu.main_menu, menu);
    this.initSearchView(menu);
    return true;
}

次に、同じテーマのコンテキストを SearchView の作成/初期化に渡します。

private void initSearchView(final Menu menu)
{
    final SearchManager searchManager = (SearchManager) this.getSystemService(Context.SEARCH_SERVICE);
    final MenuItem searchViewMenuItem = menu.findItem(R.id.menu_search);

    final SearchView searchView = new SearchView(this.getSupportActionBar().getThemedContext());
    searchView.setSearchableInfo(searchManager.getSearchableInfo(this.getComponentName()));
    searchView.setIconifiedByDefault(false);
    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(final View v, final boolean hasFocus)
        {
            if (!hasFocus)
            {
                // Collapse the searchbox on ActionBar
                searchViewMenuItem.collapseActionView();
            }
        }
    });
}

これが誰かを助けるか、「修正」されてうまくいくことを願っています。

于 2013-09-29T07:29:28.393 に答える