ActionBarDrawerToggle无法找到其活动

时间:2015-04-02 22:50:46

标签: android navigation-drawer

我终于设法编译了appcompat-v7,现在当我的应用程序启动时,它会抛出以下异常:

  

java.lang.NoClassDefFoundError:com.example.Project1.MainActivity $ 1

这是它抛出的那一行:

package com.example.Project1;

    public class MainActivity extends Activity
    {
      private DrawerLayout drawerLayout;
      private ActionBarDrawerToggle drawerToggle;
     ...
      drawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
                    R.string.drawer_open, R.string.drawer_close)

这是Manifest中的包:

 package="com.example.Project1"

它还包含MainActivity。

2 个答案:

答案 0 :(得分:2)

请注意,异常是指MainActivity$1,它是MainActivity中的匿名内部类,而不是MainActivity本身。我怀疑它是指你的ActionBarDrawerToggle,你的代码继续为:

drawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
    R.string.drawer_open, R.string.drawer_close) {

    public void onDrawerClosed(View view) {
        ...
    }

    public void onDrawerOpened(View drawerView) {
        ...
    }
}

当我从ActionBarDrawerToggle v4(已弃用)迁移到v7时,遇到了同样的异常。最后,我发现异常是由于在我的项目中引用了两个不同的v7支持jar(其中一个不包含v7 ActionBarDrawerToggle)引起的。我通过

解决了这个问题
  1. 删除对每个jar的引用(在Eclipse中:右键单击项目>属性> Java构建路径)
  2. android-sdk\extras\android\support\v7\appcompat导入为Eclipse项目
  3. 将该项目作为库添加到我的Android项目中(右键单击项目>属性> Android>库>添加...)

答案 1 :(得分:0)

通常,NoClassDefFoundError意味着您忘记在清单中定义活动。 这就是一个简单的清单应该是这样的:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.Project1">

    <application
        android:name=".Project1">

        <activity
            android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

    </application>
</manifest>

您的清单是否包含<activity>标记及其内容? 您可以在此处查看更多信息:http://developer.android.com/guide/topics/manifest/manifest-intro.html