简体   繁体   English

导航抽屉 - 抽屉布局无法实例化

[英]Navigation Drawer - Drawer Layout cannot be instantiated

I am trying to implement a Navigation Drawer in my App but I am having serious trouble with it. 我正在尝试在我的应用程序中实现导航抽屉,但我遇到了严重问题。 Right now my Problem is that I want to put my MainContent inside a Drawer Layout like this: 现在我的问题是我想将我的MainContent放在抽象布局中,如下所示:

<android.support.v4.widget.DrawerLayout
    android:id = "@+id/drawer_layout"
    xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    >

    <FrameLayout
      [...]
    </FrameLayout>
</android.support.v4.widget.DrawerLayout>

But I get this error code 但是我得到了这个错误代码

The following classes could not be instantiated: - android.support.v4.widget.DrawerLayout (Open Class, Show Exception) 无法实例化以下类: - android.support.v4.widget.DrawerLayout(Open Class,Show Exception)

These are the exception details: 这些是例外细节:

java.lang.ClassNotFoundException: android.support.v4.widget.DrawerLayoutImpl
    at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:148)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:642)
    at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:195)
    at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:191)
    at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:152)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at com.android.tools.idea.rendering.RenderClassLoader.loadClassFromJar(RenderClassLoader.java:78)
    at org.jetbrains.android.uipreview.ProjectClassLoader.loadClassFromModuleOrDependency(ProjectClassLoader.java:108)
    at org.jetbrains.android.uipreview.ProjectClassLoader.load(ProjectClassLoader.java:89)
    at com.android.tools.idea.rendering.RenderClassLoader.findClass(RenderClassLoader.java:56)
    at org.jetbrains.android.uipreview.ProjectClassLoader.findClass(ProjectClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:173)
    at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:96)
    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:482)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:401)
    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:604)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1900(AndroidLayoutPreviewToolWindowManager.java:80)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$7$1.run(AndroidLayoutPreviewToolWindowManager.java:546)
    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$7.run(AndroidLayoutPreviewToolWindowManager.java:541)
    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:511)
    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)

I follow this guide http://developer.android.com/training/implementing-navigation/nav-drawer.html But till now it does not work at all. 我遵循本指南http://developer.android.com/training/implementing-navigation/nav-drawer.html但到目前为止它根本不起作用。 Maybe somebody has a better tutorial on how to implement a navigation drawer properly with Android 5.0?? 也许有人有一个更好的教程,如何使用Android 5.0正确实现导航抽屉?

Thanks in advance for any help. 在此先感谢您的帮助。

Sincerely John 真诚的约翰

Got here with the same problem, first of all, pay attention to what Christer Nordvik commented: 在这里遇到同样的问题,首先,要注意Christer Nordvik评论的内容:

Think it is a bug in the latest tools version: https://code.google.com/p/android/issues/detail?id=78090 认为这是最新工具版本中的错误: https//code.google.com/p/android/issues/detail?id = 78090

We have the same in the designer, but when running it is fine. 我们在设计师中也有同样的东西,但在运行时它很好。 Worked without issues before the API level 21 release of the SDK. 在API级别21发布之前,没有遇到任何问题。

As I see it you have 4 options: 在我看来,你有4个选择:


Option 1: go back to Android pre 5.0 Use and compile with your code with SDK 20 选项1:回到Android pre 5.0使用并使用SDK 20编译代码

Change build.gradle to the following: 将build.gradle更改为以下内容:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.example.yourapp"
        minSdkVersion 8
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:20.0.0'
}

change the following lines to what ever corresponds to your project: 将以下行更改为与项目对应的行:

        applicationId "com.example.yourapp"
        minSdkVersion 8

Most likely you will also need to change "res\\v21\\styles.xml" from: 您很可能还需要更改“res \\ v21 \\ styles.xml”:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material.Light">
    </style>
</resources>

to: 至:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Holo.Light">
    </style>
</resources>

As the material themes are introduced on Lollipop / Android 5.0 由于材料主题是在Lollipop / Android 5.0上引入的

Sync your project with the new gradle file, wait for the syncing to finish and you are good to go, you should now see the layout preview 将项目与新的gradle文件同步,等待同步完成,你很高兴,你现在应该看到布局预览

使用Gradle Files同步项目


Option 2: update your code in text 选项2:在文本中更新代码

Code will compile and work just fine, just update your code in text, no previews. 代码将编译并正常工作,只需在文本中更新代码,无需预览。 Instead do changes and try them on a emulator or an actual Android device. 而是做更改并在模拟器或实际的Android设备上尝试它们。


Option 3: combine the first 2 options 选项3:结合前两个选项

Use option 1, do what ever you need to do to the layouts (as long as it doesn't needs nothing specific from SDK 21) and when done revert changes done to build.gradle and styles.xml so you can enjoy the new eye candy of Lollipop, just test it on an emulator or device as suggested on option 2 使用选项1,执行您需要对布局执行的操作(只要它不需要SDK 21中的任何特定内容),并在完成时将还原对build.gradle和styles.xml进行更改,以便您可以享受新的眼睛Lollipop的糖果,只需按照选项2的建议在模拟器或设备上进行测试


Option 4: wait they fix the bug 选项4:等他们修复bug

just that. 只是。


Long shot extra option: 远射额外选项:

If you have installed a stable build of Android Studio, try a Beta or Canary, who knows, may be there is a patch implemented to solve that issue on one of them (I have a stable build, so I don't know). 如果您已经安装了稳定版本的Android Studio,请尝试使用Beta或Canary,他们知道可能有一个补丁实现了解决其中一个问题(我有一个稳定的版本,所以我不知道)。 Or try on Eclipse 或者试试Eclipse

The error you mentioned comes from the UI editor. 您提到的错误来自UI编辑器。 This happens when a custom view cannot be previewed in the editor. 当无法在编辑器中预览自定义视图时会发生这种情况。 This is not an issue. 这不是问题。 If you run your application everything should be fine. 如果你运行你的应用程序一切都应该没问题。

This is a sample Nevigation Drawer - Drawer Layout code, you can use it with out errors.. 这是一个样本Nevigation抽屉 - 抽屉布局代码,您可以使用它没有错误..

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

       <FrameLayout
            android:id="@+id/left_drawer"
            android:layout_width="330dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="multipleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="@drawable/gradient_gray">

          [...]
    </FrameLayout>
</android.support.v4.widget.DrawerLayout>

Think it is a bug in the latest tools version: https://code.google.com/p/android/issues/detail?id=78090 认为这是最新工具版本中的错误: https//code.google.com/p/android/issues/detail?id = 78090

We have the same in the designer, but when running it is fine. 我们在设计师中也有同样的东西,但在运行时它很好。 Worked without issues before the API level 21 release of the SDK. 在API级别21发布之前,没有遇到任何问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM