Android:从选项菜单启动活动

问题描述:

我试图从选项菜单启动一项活动,但我的应用程序不断崩溃。我收到的唯一错误是Eclipse中调试窗口中的ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord,Intent)错误。Android:从选项菜单启动活动

以下是我目前正在使用的代码,但请记住,我已经尝试了多个选项,所有这些选项都在同一段代码中完成 - startActivity语句(通过使用断点,因为我不确定如何在LogCat窗口中查看堆栈跟踪,如我在前面的问题Android/Eclipse: assistance with LogCat中所述)。

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    getMenuInflater().inflate(R.menu.changescheme, menu); 
    menu.findItem(R.id.changeScheme).setIntent(new Intent(this, ColourActivity.class)); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    super.onOptionsItemSelected(item); 
    this.closeOptionsMenu(); 
    startActivity(item.getIntent()); 
    return true; 
} 

这里是changescheme.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/changeScheme" android:title="Change Colour Scheme" android:icon="@android:drawable/ic_menu_edit"></item> 
</menu> 

我一直在使用一个开关(item.getItemId())语句中,而不是在menu.findItem在onOptionsItemSelected块也尝试onCreateOptionsMenu块,但仍然没有运气。

我已经在我的Manifest文件中定义了这个活动。我也可以从常规按钮启动该活动,并且第一次在设备上打开该应用时,该活动将在我的启动画面后立即启动,并且我没有遇到任何这些方法的问题。

对我来说,这表明ColourActivity类或其关联的布局文件没有任何问题,但是从选项菜单中的实现存在问题。

我也在上面显示的代码中实现了同样的方法(在代码中)在不同的应用程序,并没有问题,所以我真的在这里亏本。

所有帮助将不胜感激。

谢谢,亚当。您正在激活应指向一些目标组件,这是不是在你的情况

+0

如果您可以提供logcat,这将非常有帮助。请尝试... – 2012-07-21 04:55:13

+0

@LaiVung请回顾一下问题中提供的链接,其中概述了我不确定如何去做这件事...... – Adam 2012-07-21 05:19:29

+0

'ColourActivity'是你的活动吗? – 2012-07-21 06:09:55

我现在已经解决了这个问题。

事实证明,这个问题根本不在ListActivity课上,实际上是在ColourActivity课上。

我试图解析onCreate中的几种颜色,但我忘记了将#包含在RGB颜色字符串之一中,因此崩溃!

感谢大家的帮助,Adam。

+0

当网站允许我这样做时,我会将此答案标记为正确,因为我的声誉太低而无法将其标记为正确答案马上 – Adam 2012-07-21 22:49:12

意图,而不是你应该做以下:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    super.onOptionsItemSelected(item); 
    this.closeOptionsMenu(); 
    Intent intent = new Intent(ActivityA.this, ColourActivity.class); 
    /*Here ActivityA is current Activity and ColourActivity is the target Activity.*/ 
    startActivity(intent); 
    return true; 
} 
+0

感谢您的回复@jeet,但我已经像ListActivity.this(而不是仅仅是“this”)那样尝试了它,并且ListActivity是执行此代码的类,它不起作用。我也尝试将我的代码中的单行分隔成两行,就像在你的行中一样(在一个单独的行上初始化意图),也没有这样的运气。任何其他想法? – Adam 2012-07-21 05:12:39

+0

我检查了你的代码,它的工作完美。似乎还有其他一些问题,如果你可以发布日志,我们可以检查。 – jeet 2012-07-21 12:35:20

尝试用这个,

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflator = getMenuInflater(); 
    inflator.inflate(R.menu.changescheme, menu); 
    return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

    switch(item.getItemId()) 
     { 
     case R.id.changeScheme: 
     Log.d("ChangeScheme", "Selected : ChangeScheme Option"); 

startActivity(new Intent(MainAcitivity.this, ColourActivity.class)); 

      return true; 
     caseR.id.help: 
      Log.d("HelpMenu", "Selected : Help Option"); 
      //Here put your code 
      return true; 


     } 

    } 
+0

这正是我所期望的。在崩溃之前,我可以在日志中看到它。我甚至尝试将Log.d更改为Log.e,希望能够在此之后直接看到日志(假设它是日志告诉我为什么我的应用崩溃了),但是此输出是唯一显示的行在LogCat – Adam 2012-07-21 05:30:05

检查:

@Override 
    public boolean onCreateOptionsMenu(Menu menu){ 
     MenuInflater inflater=getMenuInflater(); 
     inflater.inflate(R.menu.changescheme, menu); 
     return true; 
    } 

@Override 
    public boolean onOptionsItemSelected(MenuItem item){ 
     switch (item.getItemId()) { 
     case R.id.changeScheme: 
      //start activity here 
      break; 

     case R.id.help: 
      //start activity here 
      break; 
     } 
     return true; 
    } 
+0

谢谢,已经试过这个,我在我的问题中说过。我没有运气 – Adam 2012-07-21 05:20:33

你好adam你的代码似乎是完美的罚款,而我在我的模拟器上测试,请检查是否y您已将类名“ColourActivity”添加到清单文件中。

<activity android:name="ColourActivity"></activity> 
+0

是的我有,谢谢,虽然它在我的Mainfest中是“.ColourActivity” – Adam 2012-07-21 05:23:40