[android] 렌더링 중 예외 발생 : 모드 0을 찾을 수 없습니다.

BuildTools버전 25.0.0으로 업데이트 한 후 .

compileSdkVersion 25
buildToolsVersion "25"

안드로이드 레이아웃 미리보기에 문제가 있습니다. 이제 오류가 표시됩니다.

렌더링 중 예외 발생 : 모드 0을 찾을 수 없습니다.

여기에 이미지 설명 입력

Clean & Rebuild 프로젝트를 시도했지만 작동하지 않습니다. 업데이트하기 전에 모든 것이 좋았습니다.

의 이전 버전으로 돌아갈 수 있다는 것을 알고 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)



답변

문제 가 해결되었습니다. 지원 라이브러리를 다음으로 업데이트하십시오.

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'


답변

버전 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'


답변

또 다른 임시 해결책은 렌더링 된 뷰를 볼 수 있도록 로 교체 <android.support.v7.widget.RecyclerView하는 <RecyclerView것입니다. 컴파일 할 때 다시 변경하십시오.<android.support.v7.widget.RecyclerView


답변

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' 


답변

미리보기를 보려면이 트릭을 사용합니다 … app:layoutManager="0"레이아웃 XML에서 recyclerView에 추가

그러나 런타임에 InflateException이 발생합니다. 따라서 앱을 실행하기 전에 XML 레이아웃 파일에서이 속성을 제거 하십시오!


답변

임시 솔루션으로 리사이클 러 뷰의 자식 클래스를 만들고 아래와 같이 onAttachedToWindow 만 재정의 할 수 있습니다. 그런 다음 XML 레이아웃에서이 클래스를 사용하십시오.

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

업데이트 : 지원 라이브러리 25.0.1부터 시작하여 라이브러리에 이미 포함 된 수정 사항이 더 이상 존재하지 않음


답변