Исключение при рендеринге: невозможно определить режим 0

91

После обновления BuildToolsдо версии 25.0.0.

compileSdkVersion 25
buildToolsVersion "25"

У меня проблема с предварительным просмотром макета Android. Теперь он показывает ошибку:

Исключение при рендеринге: невозможно определить режим 0

введите описание изображения здесь

Я попытался очистить и восстановить проект, но это не сработало. До обновления все было хорошо.

Я знаю, что могу вернуться к предыдущим версиям BuildTools, но хочу знать, почему это не работает в версии 25.0.0?


Похоже, это проблема с RecyclerView

java.lang.IllegalStateException: Unable to locate mode 0
at android.view.DisplayInfo.findMode(DisplayInfo.java:458)
at android.view.DisplayInfo.getMode(DisplayInfo.java:445)
at android.view.Display.getRefreshRate(Display.java:648)
at android.support.v7.widget.RecyclerView.onAttachedToWindow(RecyclerView.java:2392)
at android.view.View.dispatchAttachedToWindow(View.java:15392)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2953)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2960)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2960)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2960)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2960)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2960)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2960)
at android.view.AttachInfo_Accessor.setAttachInfo(AttachInfo_Accessor.java:42)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:333)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:429)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:389)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:548)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:533)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:966)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:533)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$53(RenderTask.java:659)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
RediOne1
источник
15
Похоже на ошибку с 25.0.0. Я открыл для него проблему: code.google.com/p/android/issues/…
Джим Пекарек,
2
У меня такая же проблема с compileSdkVersion 24 / buildToolsVersion "24.0.2" - однако вчера я позволил Android Studio выполнить обновление (различных вещей, по сути, того, что когда-либо запрашивалось), и я считаю, что после этого он сломался.
Стивен Крафт,
1
@HenriquedeSousa Проблема, возникшая, когда en.wikipedia.org/wiki/Andy_Rubin покинул #Google
IntelliJ Amiya

Ответы:

111

Эта проблема решена, обновите библиотеку поддержки до

compile 'com.android.support:recyclerview-v7:25.0.1'
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.android.support:design:25.0.1'
Фуркан
источник
62

Это досадная ошибка версии 25. Временное решение - понизить версию вашего проекта,

 compile 'com.android.support:appcompat-v7:24.2.1'
 compile 'com.android.support:design:24.2.1'
 compile 'com.android.support:recyclerview-v7:24.2.1'
XcodeNOOB
источник
18

Другое временное решение - заменить его <android.support.v7.widget.RecyclerViewна, <RecyclerViewчтобы вы могли видеть визуализированный вид. При компиляции измените его обратно на<android.support.v7.widget.RecyclerView

Hibbem
источник
7

Библиотека поддержки Android обеспечивает обратно совместимые служебные функции. Приложения могут использовать эти служебные функции для обеспечения надлежащего взаимодействия с пользователем в широком диапазоне версий системы Android.

Это ошибка, которая должна быть исправлена ​​в будущем выпуске библиотеки поддержки дизайна .

Вам следует перейти на более раннюю версию для Временных решений .

compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.android.support:design:v7:25.0.1' 
compile 'com.android.support:recyclerview-v7:25.0.1' 
IntelliJ Amiya
источник
6

Чтобы увидеть предварительный просмотр, я использую этот трюк ... добавляю app:layoutManager="0"для recyclerView в XML макета

Но он вызовет InflateException во время выполнения. Поэтому УДАЛИТЕ это свойство из файла макета XML перед запуском приложения!

Зохаб Али
источник
4

В качестве временного решения вы можете создать дочерний класс представления ресайклера и переопределить только onAttachedToWindow, как показано ниже. Затем используйте этот класс в своих макетах XML

@Override
protected void onAttachedToWindow() {
    if (!isInEditMode()) {
        super.onAttachedToWindow();
    }
}

Обновление: начиная с библиотеки поддержки 25.0.1, исправление уже включено в библиотеку, и проблема больше не существует

Самех Михаил
источник