0

我只是通过教科书学习使用 Android (Learn Android App Development by Jackson)。目前,我有一个 MainActivity 类。我将 Intents 添加到此活动的菜单中,以根据哪个选项启动其他四个活动之一。所有活动都在同一个包中,并且都已在 AndroidManifest.XML 文件中声明。

我正在确定使用 Switch 案例运行哪个活动,如下所示:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_add:
        System.out.println("Add");
        Intent intent_add = new Intent(this, NewPlanet.class);
        this.startActivity(intent_add);
        break;
    case R.id.menu_attack:
        System.out.println("Attack");
        Intent intent_attack = new Intent(this, AttackActivity.class);
        this.startActivity(intent_attack);
        break;
    case R.id.menu_config:
        System.out.println("Config");
        Intent intent_config = new Intent(this, ConfigActivity.class);
        this.startActivity(intent_config);
        break;  
    case R.id.menu_travel:
        System.out.println("Travel");
        Intent intent_travel = new Intent(this, TravelActivity.class);
        this.startActivity(intent_travel);
        break;
    default:
        return super.onOptionsItemSelected(item);
    }
    System.out.println("Outside switch.");
    return true;
}

但是,问题在于,这仅在按下“添加”菜单按钮时才有效,该按钮成功启动 NewPlanet 活动并显示它。

然而,所有其他的都会产生一个 ActivityNotFoundException 并强制程序崩溃(在虚拟设备的各种组合以及我的物理 Galaxy Note II 设备上的结果相同)。

我已经尽我所能试图解决这个问题,但无济于事。据我所知,代码与书中介绍的相同,但是当我的项目还没有工作时,本书已经开始进入下一节。

如果有人想看到,我有 LogCat 输出,但任何帮助或建议将不胜感激。我用谷歌搜索了这个问题,但没有多大帮助。

编辑:根据要求,这是我的清单:(我将其附加为高分辨率图像,因为我现在遇到了编辑问题)

http://i.imgur.com/c7wJ8bM.png

这是相关的 LogCat 输出:

07-03 10:42:53.954: E/AndroidRuntime(29754): FATAL EXCEPTION: main
07-03 10:42:53.954: E/AndroidRuntime(29754): android.content.ActivityNotFoundException: Unable to find explicit activity class {chapter.two.hello_world/chapter.two.hello_world.ConfigActivity}; have you declared this activity in your AndroidManifest.xml?

最终编辑:

感谢用户 E. Odebugg,我已经解决了这个问题:我在清单中用不正确的名称(ConfigPlanet 而不是 ConfigActivity)引用了我的活动。我根本没有注意到差异。一个愚蠢的错误,但现在已修复。谢谢大家的帮助!

4

4 回答 4

1

您的清单可能有问题。也许您为所有活动复制并粘贴了相同的属性,因此有多个 Launcher IntentFilter 类别。您可以同时发布堆栈跟踪和清单吗?

于 2013-07-03T19:52:27.853 回答
1

显然,您共享的屏幕截图显示您已经声明了一些ConfigPlanet活动,而在您的 switch-case 中,您正在调用ConfigActivity

将 AndroidManifest.xml 中的 .ConfigPlanet 替换为 .ConfigActivity,确保在正确的包中确实有一个 ConfigActivity.java 文件。

于 2013-07-03T20:17:32.717 回答
1

您的清单中没有ConfigActivity声明。不知何故,您在那里有一个ConfigPlanet不一样的条目。所以这就是原因。

于 2013-07-03T20:19:17.687 回答
0

确保您的所有活动都在您的 AndroidManifest.xml 中声明。

<manifest ... >
  <application ... >
      <activity android:name="your.packagename.AttackActivity" />
      <activity android:name="your.packagename.ConfigActivity" />
      <activity android:name="your.packagename.TravelActivity" />
      ...
  </application ... >
  ...
</manifest >

详情见http://developer.android.com/guide/components/activities.html

于 2013-07-03T19:54:08.047 回答