Android:从选项菜单启动活动

时间:2012-07-21 04:31:48

标签: android eclipse android-activity menu options

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

下面是我目前正在使用的代码,但请记住,我尝试了多个选项,所有这些选项都在相同的代码中以同样的代码结束 - 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>

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

我已在我的清单文件中定义了活动。我也可以从常规按钮开始活动,第一次在设备上打开应用程序时,活动会在我的启动画面后立即启动,而且我对这两种方法都没有任何问题。

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

我也在不同的应用程序中实现了如上所示(在代码中)的相同方法,没有任何问题,所以我真的很茫然。

非常感谢所有帮助。

谢谢,亚当。

5 个答案:

答案 0 :(得分:0)

你要激活的意图应该指向某个目标组件,而不是你的情况,而是应该做以下事情:

@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;
}

答案 1 :(得分:0)

试试这个,

    @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;


         }

    }

答案 2 :(得分:0)

检查一下:

@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;
    }

答案 3 :(得分:0)

嗨,亚当您的代码在我的模拟器上测试时似乎非常好,请检查您是否已将类名“ColourActivity”添加到您的清单文件中。

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

答案 4 :(得分:0)

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

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

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

感谢大家的帮助,亚当。