导航抽屉更新导致崩溃(App compact v7)

时间:2014-11-27 04:11:21

标签: android navigation-drawer android-support-library

我在导航抽屉上获得以下日志:

11-27 09:32:11.811: E/AndroidRuntime(2149): java.lang.NoSuchFieldError: No static field DrawerArrowToggle of type [I in class Landroid/support/v7/appcompat/R$styleable; or its superclasses (declaration of 'android.support.v7.appcompat.R$styleable' appears in /data/app/com.exa-1/base.apk)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.support.v7.app.DrawerArrowDrawable.<init>(DrawerArrowDrawable.java:64)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.support.v7.app.ActionBarDrawerToggle$DrawerArrowDrawableToggle.<init>(ActionBarDrawerToggle.java:469)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.support.v7.app.ActionBarDrawerToggle.<init>(ActionBarDrawerToggle.java:222)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.support.v7.app.ActionBarDrawerToggle.<init>(ActionBarDrawerToggle.java:150)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at com.exa.MainActivity$2.<init>(MainActivity.java:199)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at com.exa.MainActivity.onCreate(MainActivity.java:201)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.app.Activity.performCreate(Activity.java:5933)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.app.ActivityThread.access$800(ActivityThread.java:144)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.os.Handler.dispatchMessage(Handler.java:102)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.os.Looper.loop(Looper.java:135)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at android.app.ActivityThread.main(ActivityThread.java:5221)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at java.lang.reflect.Method.invoke(Native Method)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at java.lang.reflect.Method.invoke(Method.java:372)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-27 09:32:11.811: E/AndroidRuntime(2149):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

我正在尝试使用箭头将我的抽屉更新到Play商店中的抽屉,这是我的导入:

import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;

日志对应于我的代码中的以下行:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.string.app_name, // 
                R.string.app_name // <~~~~ THIS LINE, Culprit identified!
) {

            public void onDrawerSlide(View drawerView, float slideOffset) {
                if(slideOffset > .55 && !drawerOpen){
                    onDrawerOpened(drawerView);
                    drawerOpen = true;
                } else if(slideOffset < .45 && drawerOpen) {
                    onDrawerClosed(drawerView);
                    drawerOpen = false;
                }
            } 





            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                // calling onPrepareOptionsMenu() to show action bar icons
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle(mDrawerTitle);
                // calling onPrepareOptionsMenu() to hide action bar icons
                invalidateOptionsMenu();
            }
        };

我已经将支持库v7添加到我的libs文件夹中并添加到构建路径中,它在Order and Export中被勾选,但我可以在我的gen文件夹中看到它的R的android.support.v7.appcompact的.java。

我还将appcompact_v7添加为参考项目。我在这里想念什么?

3 个答案:

答案 0 :(得分:3)

我没有看到代码有任何问题。

尝试使用项目资源导入v7 appcompat,而不是直接将appcompat库.jar文件添加到libs文件夹。

以下是使用资源导入appcompat的链接 https://developer.android.com/tools/support-library/setup.html

答案 1 :(得分:1)

将v7 appcompat项目添加为库,将其链接到主项目中,并确保针对Android 5.0进行编译。 有关说明,请参阅Pallavi的链接。

答案 2 :(得分:1)

有点晚了,但对我来说问题是包括支持库作为我的构建路径中的库项目。除了围绕jar文件创建一个库项目之外,你还需要管理有几个版本/&#34;修订版&#34;支持库的jar文件,我将解释。

关于你标记的行,R类是在构建时生成的,所以如果你的构建失败(由于任何原因),就不会有任何R类,这就是你在哪里遇到错误的原因正在尝试访问R类。

如果您使用Intellij Idea(或Android Studio,因为它是Intellij的一个子集),请务必添加一个且仅一个&#39; (例如19.0)或者20.0或21.0)的支持库jar文件(例如android-support-v4或android-support-appcompat-v7)作为&#34;项目&#34;库,然后添加&#34;库&#34;作为依赖于使用支持库(项目结构&gt;模块)的每个&#34;模块&#34; 。添加您在包装器支持库项目中包含的相同jar,作为项目级库,并且不要忘记添加这些&#34;库&#34;作为对MAIN模块以及使用支持库的所有其他模块(eclipse项目)的依赖。

如果你正在使用其他一些库/依赖项,很可能他们正在使用支持库&android-support-v4和/或android-support-appcompat-v7,这可能会导致版本冲突(和multi dex错误。因此,请确保在模块级别删除它们对提到的jar文件的依赖性,并将项目级库添加到这些模块中。

请注意,支持库jar文件的修订版与其名称中的版本编号之间存在差异。修订版是指Android平台的API级别(Android版本),您已下载支持库(使用SDK管理器)和(为此)jar已更新以提供该特定API级别的新功能。包含在jar名称中的版本是该特定jar所需的“最小”SDK。

选择与您正在使用的所有库兼容的修订。支持库的较新版本不一定向后兼容,某些内容可能在较新的版本中被删除。

如果你来自Eclipse,在Intellij Idea的术语中,有一个&#34;模块&#34;是一个库项目(除了代码之外还有一个带有资源(如图形)的项目,就像支持库或图表绘图库一样)。除了库项目之外,常规Eclipse项目也被视为“模块”和“项目&#34;被认为是一组(相关的)模块(一个主模块,其余模块作为库模块)。

如果您已在另一个IDE中构建项目,请确保&#34;重建&#34;你的项目(在Intellij Idea中)或&#34;清洁&#34; (在Eclpise中)在运行你的应用程序之前。遗憾的是Eclipse和Intellij Idea / Android Studio不兼容,并且由其他人创建的编译文件无法被其他人读取。