我正在尝试在我的应用程序中实现导航抽屉,但我遇到了严重问题。现在我的问题是我想将我的MainContent放在Drawer Layout中,如下所示:
<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>
但我收到此错误代码
无法实例化以下类: - 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)
我遵循本指南http://developer.android.com/training/implementing-navigation/nav-drawer.html但到目前为止它根本不起作用。也许有人有一个更好的教程,如何使用Android 5.0正确实现导航抽屉??
提前感谢您的帮助。
真诚的约翰
答案 0 :(得分:5)
遇到同样的问题,首先要注意Christer Nordvik的评论:
认为这是最新工具版本中的错误: https://code.google.com/p/android/issues/detail?id=78090
我们在设计师中也有同样的东西,但在运行时它很好。工作 在API级别21发布SDK之前没有问题。
我认为你有4种选择:
选项1:返回Android 5.0 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'
}
将以下行更改为与项目对应的行:
applicationId "com.example.yourapp"
minSdkVersion 8
您很可能还需要更改&#34; res \ v21 \ styles.xml&#34;从:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light">
</style>
</resources>
为:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="android:Theme.Holo.Light">
</style>
</resources>
由于材料主题在Lollipop / Android 5.0上推出
将您的项目与新的gradle文件同步,等待同步完成,你很高兴,你现在应该看到布局预览
选项2:以文字更新您的代码
代码将编译并正常工作,只需在文本中更新代码,无需预览。而是进行更改并在模拟器或实际的Android设备上试用它们。
选项3:合并前两个选项
使用选项1,执行您需要对布局执行的操作(只要它不需要SDK 21中的任何特定内容),并在完成时将还原对build.gradle和styles.xml进行更改,以便您可以享受棒棒糖的新眼睛糖果,只需按照选项2的建议在模拟器或设备上进行测试
选项4:等待他们修复错误
就是这样。
远射额外选项:
如果您已经安装了稳定版本的Android Studio,请尝试测试Beta或Canary,他们知道,可能有一个补丁实现了解决其中一个问题(我有一个稳定的版本,所以我没有&#39 ;知道)。或者试试Eclipse
答案 1 :(得分:0)
您提到的错误来自UI编辑器。当无法在编辑器中预览自定义视图时会发生这种情况。这不是问题。如果你运行你的应用程序一切都应该没问题。
答案 2 :(得分:0)
这是一个简单的导航抽屉 - 抽屉布局代码,你可以毫无错误地使用它。
<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>
答案 3 :(得分:0)
认为这是最新工具版本中的错误: https://code.google.com/p/android/issues/detail?id=78090
我们在设计师中也有同样的东西,但在运行时它很好。在API级别21发布之前,没有遇到任何问题。