12

Also habe ich eine Aufnahme im Material Design von Android Preview L. gemacht. Ich habe sowohl die CardView als auch die RecyclerView Bibliotheken importiert.Die Verwendung von CardView und RecyclerView in meinen Layoutdateien löst eine Ausnahme aus

Ich verwende die Android Studio Preview Version 0.8.0. Halten Sie die neuesten SDK-Pakete bereit.

Sobald ich sie in meinen Layout-Dateien verwende, löst die Vorschau eine Ausnahme für beide aus. Hier

ist die Ausnahme für die CardView:

java.lang.ClassFormatError: Illegal field name "CardView.Dark" in class android/support/v7/cardview/R$style 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:792) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:635) 
at org.jetbrains.android.uipreview.ProjectClassLoader.findClass(ProjectClassLoader.java:63) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:411) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at android.support.v7.widget.CardView.initialize(CardView.java:69) 
at android.support.v7.widget.CardView.<init>(CardView.java:60) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:375) 
at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:100) 
at com.android.tools.idea.rendering.LayoutlibCallback.loadView(LayoutlibCallback.java:172) 
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207) 
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:132) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:478) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:381) 
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:395) 
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:329) 
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:332) 
at com.android.tools.idea.rendering.RenderService$3.compute(RenderService.java:575) 
at com.android.tools.idea.rendering.RenderService$3.compute(RenderService.java:564) 
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932) 
at com.android.tools.idea.rendering.RenderService.createRenderSession(RenderService.java:564) 
at com.android.tools.idea.rendering.RenderService.render(RenderService.java:691) 
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.doRender(AndroidLayoutPreviewToolWindowManager.java:586) 
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1900(AndroidLayoutPreviewToolWindowManager.java:80) 
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$6$1.run(AndroidLayoutPreviewToolWindowManager.java:528) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178) 
at com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171) 
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$6.run(AndroidLayoutPreviewToolWindowManager.java:523) 
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320) 
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310) 
at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254) 
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269) 
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227) 
at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217) 
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238) 
at com.intellij.util.Alarm$Request$1.run(Alarm.java:327) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:724) 

Und hier ist die Ausnahme für RecyclerView:

java.lang.NullPointerException 
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1310) 
at android.view.View.measure(View.java:16987) 
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:722) 
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:458) 
at android.view.View.measure(View.java:16987) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5257) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:314) 
at android.view.View.measure(View.java:16987) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5257) 
at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:447) 
at android.view.View.measure(View.java:16987) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5257) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1083) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:615) 
at android.view.View.measure(View.java:16987) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5257) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
at android.view.View.measure(View.java:16987) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:875) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
at android.view.View.measure(View.java:16987) 
at com.android.layoutlib.bridge.impl.RenderSessionImpl.measureView(RenderSessionImpl.java:621) 
at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:521) 
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:331) 
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:332) 
at com.android.tools.idea.rendering.RenderService$3.compute(RenderService.java:575) 
at com.android.tools.idea.rendering.RenderService$3.compute(RenderService.java:564) 
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932) 
at com.android.tools.idea.rendering.RenderService.createRenderSession(RenderService.java:564) 
at com.android.tools.idea.rendering.RenderService.render(RenderService.java:691) 
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.doRender(AndroidLayoutPreviewToolWindowManager.java:586) 
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1900(AndroidLayoutPreviewToolWindowManager.java:80) 
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$6$1.run(AndroidLayoutPreviewToolWindowManager.java:528) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178) 
at com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212) 
at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171) 
at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$6.run(AndroidLayoutPreviewToolWindowManager.java:523) 
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320) 
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310) 
at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254) 
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269) 
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227) 
at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217) 
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238) 
at com.intellij.util.Alarm$Request$1.run(Alarm.java:327) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:724) 

Dies macht fast unmöglich Gebäude Layout, diese beiden (erstaunlich) View s verwenden, die Ich bin sehr neugierig.

Gibt es bereits eine Lösung dafür, oder wird das tatsächlich erwartete Verhalten als "benutzerdefiniert" View s, in gewissem Sinne gesehen?

+0

Jemand anderes fragte heute früher nach dem 'CardView.Dark', IIRC. – CommonsWare

+1

Die Sache ist, ich erwähne das 'Dark' Thema nicht irgendwo. Ich erkläre nur das 'android.support.v7.widget.CardView' Tag. Kein 'Dark' (könnte ein Standardthema sein). Hattest du Probleme mit @CommonsWare? – tolgap

+1

Ich habe noch nicht damit gespielt. Ich erinnere mich nur daran, heute hier auf SO ein Problem wie dieses Thema erwähnt zu haben. – CommonsWare

Antwort

19

Dies ist ein Fehler in Android Studio. Das Vorschau-Tool weiß nicht, wie die Widgets initialisiert werden. Ich glaube schon, weil die gleiche Ausnahme von Ihrer App ausgelöst wird, wenn Sie vergessen, recyclerView.setLayoutManager() in Ihrem Code aufzurufen.

+0

Sie haben recht, ich bin gerade auf den Link [this] (https://sites.google.com/a/android.com/tools/recent/androidstudiobetareeleased) gestoßen. Android Studio scheint aus diesem Grund vor 2 Stunden aktualisiert worden zu sein. – tolgap

+0

Ich habe das Update installiert. RecyclerView wird in der Vorschau immer noch nicht angezeigt. Stattdessen zeigt es zumindest eine aussagekräftigere Fehlermeldung: "Der neue RecyclerView funktioniert in Studio noch nicht. Wir arbeiten an einer Lösung.(Öffnen Sie das Problem 72117, Ausnahme anzeigen) "https://code.google.com/p/android/issues/detail?id=72117 – user7610

+0

Der CardView-Fehlerbericht scheint dieser zu lauten: https://code.google.com/p/android/issues/detail? id = 79071, die auch auf diese Änderung in Android Studio verweist: https://android-review.googlesource.com/#/c/113416/ – personne3000

8

Ich benutze Eclipse und konfrontiert das gleiche Problem. Wie von user7610 vorgeschlagen, müssen Sie recyclerView.setLayoutManager() aufrufen, um darüber zu kommen.

Hier ist, wie ich es gelöst ..

erstellen Membervariable ..

RecyclerView.LayoutManager mLayoutManager; 

In onCreate() oder onCreateView()

recyclerView = (RecyclerView) view 
       .findViewById(R.id.business_recycler_view); 
recyclerView.setHasFixedSize(true); 

mLayoutManager = new LinearLayoutManager(getActivity()); 
recyclerView.setLayoutManager(mLayoutManager); 

Das ist mein NullPointerException gelöst.

+0

Danke für detaillierte Erklärung –

+0

Froh, dass es geholfen hat !!! Glückliche Kodierung :) –

0

Wenn jemand das gleiche Problem stellt sich diesen Code für Recycler Blick in Inneren Fragmente Verwendung

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_timeline, container, false); 

     mRecyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view); 

     // use this setting to improve performance if you know that changes 
     // in content do not change the layout size of the RecyclerView 

     mRecyclerView.setHasFixedSize(true); 
     // use a linear layout manager 
     mLayoutManager = new LinearLayoutManager(getActivity()); 
     mRecyclerView.setLayoutManager(mLayoutManager); 


     String[] abc = {"hi","how are you","this is recycler"}; 
     // specify an adapter (see also next example) 
     mAdapter = new RecyclerViewAdapter(abc); 
     mRecyclerView.setAdapter(mAdapter); 
     return rootView; 
    } 
2

ich ähnliches Problem gefunden. Als solche, wenn wir nur das Layout aufblasen, das aus RecyclerView besteht, dann wird beim Ausführen von setcontentView ein Fehler ausgegeben, weil der Layout-Manager nicht auf Recyclerview Definiert in Layout-Datei eingestellt ist.

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.searchResultsList); 
LinearLayoutManager layoutmanager = new LinearLayoutManager(this); 
layoutmanager.setOrientation(LinearLayoutManager.VERTICAL); 
recyclerView.setLayoutManager(layoutmanager);