Сбой SearchView с ошибкой инфляции (androidx) - ресурс не найден, исключение - PullRequest
7 голосов
/ 06 марта 2019

У меня есть SearchView в одном из моих макетов, и я получаю аварийное завершение работы приложения на некоторых устройствах. Проблема в том, что ресурс abc_textfield_search_material не найден. Но я не использую этот ресурс напрямую, так как мой xml-макет выглядит следующим образом:

<androidx.appcompat.widget.SearchView
        android:id="@+id/svSearch"
        android:visibility="gone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"
        android:queryHint="@string/filter"
        app:iconifiedByDefault="false"
        android:paddingBottom="4dp"
        app:queryHint="@string/filter" />

Есть идеи, как это решить? Этот сбой происходит только на редких устройствах (менее 1%), большинство устройств просто работают. Я уже подумываю об изменении этого значения на TextView с использованием составной схемы, но, возможно, есть лучшее решение, чем просто избегать использования SearchView

StackTrace

java.lang.RuntimeException: Unable to pause activity {com.my.app/com.my.app.MainActivity}: android.view.InflateException: Binary XML file line #20: Binary XML file line #20: Error inflating class androidx.appcompat.widget.SearchView
    at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4071)
    at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4026)
    at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3978)
    at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:45)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1818)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6744)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.view.InflateException: Binary XML file line #20: Binary XML file line #20: Error inflating class androidx.appcompat.widget.SearchView
Caused by: android.view.InflateException: Binary XML file line #20: Error inflating class androidx.appcompat.widget.SearchView
Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.newInstance0(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
    at android.view.LayoutInflater.createView(LayoutInflater.java:647)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    ...
Caused by: android.content.res.Resources$NotFoundException: Drawable com.my.app:drawable/abc_textfield_search_material with resource ID #0x7f080058
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_textfield_search_material.xml from drawable resource ID #0x7f080058
    at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:847)
    at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:631)
    at android.content.res.Resources.getDrawableForDensity(Resources.java:888)
    at android.content.res.Resources.getDrawable(Resources.java:827)
    at android.content.Context.getDrawable(Context.java:635)
    at androidx.core.content.ContextCompat.a(ContextCompat.java:463)
    at androidx.appcompat.widget.AppCompatDrawableManager.a(AppCompatDrawableManager.java:203)
    at androidx.appcompat.widget.AppCompatDrawableManager.a(AppCompatDrawableManager.java:191)
    at androidx.appcompat.content.res.AppCompatResources.b(AppCompatResources.java:102)
    at androidx.appcompat.widget.TintTypedArray.a(TintTypedArray.java:76)
    at androidx.appcompat.widget.SearchView.<init>(SearchView.java:298)
    at androidx.appcompat.widget.SearchView.<init>(SearchView.java:270)
    at java.lang.reflect.Constructor.newInstance0(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
    at android.view.LayoutInflater.createView(LayoutInflater.java:647)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    ...

Тема

Я использую тему Android x в своем приложении - Theme.MaterialComponents.NoActionBar.Bridge

Затронутые устройства (я знаю о них)

  • One Plus 7 Pro (GM1913, GM1915, GM1917)
  • Samsung S9 + Корея (SM-G965N)

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Пока что я закончил тем, что использовал что-то вроде этого вместо SearchView:

https://github.com/droidparts/droidparts/blob/master/droidparts-misc/src/org/droidparts/widget/ClearableEditText.java

Простой EditText с CompoundDrawable и сенсорный слушатель для этого прозрачного значка...

Тем не менее, если кто-то найдет решение проблемы, сообщите мне, пожалуйста.

0 голосов
/ 08 апреля 2019

жалуется на:

Caused by: android.content.res.Resources$NotFoundException:
Drawable com.my.app:drawable/abc_textfield_search_material with resource ID #0x7f080058

Caused by: android.content.res.Resources$NotFoundException:
File res/drawable/abc_textfield_search_material.xml from drawable resource ID #0x7f080058

Какой должен быть содержится в самой библиотеке androidx.appcompat 1.0.2.

Добавление этого ресурса непосредственно в ресурсы приложения может помочь;

вместе с @drawable/abc_textfield_search_activated_mtrl_alpha

и @drawable/abc_textfield_search_default_mtrl_alpha.

Resources$NotFoundException может иметь различные причины ...

, но "отдельные судьбы" <1% не указывают, какие устройства и какой уровень API. </p>

a) просмотр и ограничение совместимых устройств вашего приложения может легко избавить вас от них.

b) другим вариантом может быть регистрация проблемы ; если возможно с указанными данными устройства.

...