我正在创建一个应用程序,我想从菜单中启动一个新活动,但是当我单击菜单按钮时,应用程序崩溃了。我尝试了很多方法,而且所有方法都失败了。
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>
答案 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);
}
}
我们确实需要看到logcat,但
答案 3 :(得分:1)
我做了同样的事情,即从菜单按钮启动活动;它工作得很好。至于解析与类同名的变量,我不太确定。声明可能工作正常,但我猜的是对该变量的进一步引用将不准确。另外,确保onOptionsItemSelected函数中的所有控制路径都返回一个布尔值。
答案 4 :(得分:0)
您正在尝试将类传递给startActivity方法,而不是Intent。你宣布Intent Intent。你需要做Intent intent
或Intent 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活动文件。我有一个类似的问题,项目编译好,但应用程序将强制关闭菜单按钮时选择。当我重写第二个活动时,一切都很好!