Исключение, возникающее при рендеринге: Не удается найти режим 0

После обновления 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)

Ответ 1

Этот issue был устранен, обновите библиотеку поддержки до

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'

Ответ 2

Это раздражающая ошибка версии 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'

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Это a bug проблема и должна быть исправлена ​​в будущем Выпуск библиотеки поддержки поддержки.

Вы должны понизить свою версию для Временных решений.

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' 

Ответ 6

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

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

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