从菜单按钮启动活动?

时间:2011-02-02 23:18:29

标签: java android menu android-activity

我正在创建一个应用程序,我想从菜单中启动一个新活动,但是当我单击菜单按钮时,应用程序崩溃了。我尝试了很多方法,而且所有方法都失败了。

public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(getApplication())
        .inflate(R.menu.menu, menu);


return(super.onPrepareOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
 switch (item.getItemId()) {
   case R.id.Menu1:          
    Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show();
    break;
   case R.id.Menu2:
       Intent Intent = new Intent(this, About.class);
       startActivity(Intent);


 }
return(super.onOptionsItemSelected(item));
}
}

Android Manifest

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
  <activity android:name=".AndroidRssReader"
            android:label="@string/app_name">
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
  </activity>
  <activity android:name=".About" android:label="@string/app_label"></activity>

9 个答案:

答案 0 :(得分:7)

Intent Intent = new Intent(this, About.class);
startActivity(Intent);

这需要成为

Intent intent = new Intent(this, About.class);
startActivity(intent);

答案 1 :(得分:1)

这可能是一些问题,例如根包中的关于类? (因为你将其声明为android:name=".About"

但解决此问题的最佳方法是查看 Logcat 中的崩溃详细信息(Eclipse和IntelliJ都有一个Logcat插件)。这是什么意思?

答案 2 :(得分:1)

onOptionsItemSelected()的实现略有不同,因为我自己处理选择时返回true,而不是总是传递给超类。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.Menu1:
        Intent myIntent = new Intent(this,About.class);
        startActivity(myIntent);
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

检查documentation

我们确实需要看到logcat,但

答案 3 :(得分:1)

我做了同样的事情,即从菜单按钮启动活动;它工作得很好。至于解析与类同名的变量,我不太确定。声明可能工作正常,但我猜的是对该变量的进一步引用将不准确。另外,确保onOptionsItemSelected函数中的所有控制路径都返回一个布尔值。

答案 4 :(得分:0)

您正在尝试将类传递给startActivity方法,而不是Intent。你宣布Intent Intent。你需要做Intent intentIntent myIntent这样的事情。变量和类的名称不能相同,就像你不能int int一样。

答案 5 :(得分:0)

Android可能无法启动您的About课程,例如onCreate()中抛出异常。查看logcat中的堆栈跟踪可以确认这一点。如果不清楚根本原因是什么,请发布堆栈跟踪。

答案 6 :(得分:0)

只是一个观察,但你的switch语句应该破坏并有一个默认情况。它将有助于防止将来出现错误,并可能有助于解决此问题。除此之外,发布日志......

答案 7 :(得分:0)

也许这可以解决问题。我在下面粘贴一个示例部分。因为,我认为您忘了在AndroidManifest中进行新的/第二项活动。

  <application
    android:allowBackup="true"
    android:allowTaskReparenting="true"
    android:hardwareAccelerated="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    <activity
        android:name="YourPackageName.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    **<activity 
       android:name="YourPackageName.SecondActivity" />   

    <activity 
       android:name="YourPackageName.ThirdActivity" />**   

</application>

我希望这会帮助你!

ADDED Post:

这是我的代码,一定要工作!把它放在你的主要或其他东西中,但不要放在按钮的活动中。

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {
    case R.id.MenuButton_About:
        Toast.makeText(this, "YourPopupText.", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent("Name of this activity".this, "Name of the menu button acivity".class));
        break;
    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

}

您还可以使用:Toast.LENGTH_SHORT - &gt; Toast.LENGTH_LONG

我希望这会帮助你!

答案 8 :(得分:0)

检查您的关于java活动文件。我有一个类似的问题,项目编译好,但应用程序将强制关闭菜单按钮时选择。当我重写第二个活动时,一切都很好!