ActionbarSherlock SearchView in menu.xml gives Resources$NotFoundException

Refresh

November 2018

Views

7.1k time

8

When I try to add an ActionbarSherlock SearchView to my ActionBar the application crashes as soon as the activity should be shown. As reason for this, I found the following in 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)

When I use the regular android.widget.SearchView for the android:actionViewClass everything works fine. I followed the tutorial from the Android website.

This is my menu 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>

And this is the relevant code:

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;
}

Is this a (known) bug, or am I missing something else here?

5 answers

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 (), чтобы передать «тематический контекст» в Inflater меню, как:

@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();
            }
        }
    });
}

Я надеюсь, что это поможет кому-то или он получает «фиксированный», так что это просто работает.

1

Как hahnjo упомянуто здесь :

Если вы используете тему Theme.Sherlock.Light.DarkActionBarи создать представление с new SearchView(this), он не будет работать ... Комбинации , которые будут работать: Theme.Sherlock.Light.DarkActionBarс new SearchView(getSupportActionBar().getThemedContext()) Theme.Sherlock.Lightили Theme.Sherlock.Lightсnew SearchView(this)

0

Я также получил эту ошибку, однако это было потому , что я не устанавливая android:themeна <application>узле AndroidManifest.xml.

После того, как я установил android:theme="@style/Theme.Sherlock"на <application>узле, проблема была решена.

3

Эта проблема вызвана отсутствием определенных атрибутов в версии Шерлока Theme v-14.

Я установил его, добавив

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

на тему Шерлока и красиво снова работает. Не уверен, что, если идеальное решение, но сейчас он работает :)

2

SearchViewв ActionbarSherlockэто / была известная проблема. devВетвь содержит поддержку, однако это не является полным и кажется , что они все еще возникают проблемы с предложениями.

Смотрите GitHub здесь и здесь для справки.

Вот ссылка на ActionBarSherlock> SearchView Источник