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

JRs*_*Rsz 7 java android instantiation navigation-drawer

我正在尝试在我的应用程序中实现导航抽屉,但我遇到了严重问题.现在我的问题是我想将我的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>
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误代码

无法实例化以下类: - android.support.v4.widget.DrawerLayout(Open Class,Show Exception)

这些是例外细节:

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)
Run Code Online (Sandbox Code Playgroud)

我遵循本指南http://developer.android.com/training/implementing-navigation/nav-drawer.html但到目前为止它根本不起作用.也许有人有一个更好的教程,如何使用Android 5.0正确实现导航抽屉?

在此先感谢您的帮助.

真诚的约翰

lgi*_*i84 5

在这里遇到同样的问题,首先,要注意Christer Nordvik评论的内容:

认为这是最新工具版本中的错误:https: //code.google.com/p/android/issues/detail?id = 78090

我们在设计师中也有同样的东西,但在运行时它很好.在API级别21发布之前,没有遇到任何问题.

在我看来,你有4个选择:


选项1:回到Android pre 5.0 使用并使用SDK 20编译代码

将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'
}
Run Code Online (Sandbox Code Playgroud)

将以下行更改为与项目对应的行:

        applicationId "com.example.yourapp"
        minSdkVersion 8
Run Code Online (Sandbox Code Playgroud)

您很可能还需要更改"res\v21\styles.xml":

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material.Light">
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

至:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Holo.Light">
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

由于材料主题是在Lollipop/Android 5.0上引入的

将项目与新的gradle文件同步,等待同步完成,你很高兴,你现在应该看到布局预览

使用Gradle Files同步项目


选项2:在文本中更新代码

代码将编译并正常工作,只需在文本中更新代码,无需预览.而是做更改并在模拟器或实际的Android设备上尝试它们.


选项3:结合前两个选项

使用选项1,执行您需要对布局执行的操作(只要它不需要SDK 21中的任何特定内容),并在完成时将还原对build.gradle和styles.xml进行更改,以便您可以享受新的眼睛Lollipop的糖果,只需按照选项2的建议在模拟器或设备上进行测试


选项4:等他们修复bug

只是.


远射额外选项:

如果您已经安装了稳定版本的Android Studio,请尝试使用Beta或Canary,他们知道可能有一个补丁实现了解决其中一个问题(我有一个稳定的版本,所以我不知道).或者试试Eclipse