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类或其关联的布局文件没有任何问题,但是从选项菜单中的实现存在问题。
我也在上面显示的代码中实现了同样的方法(在代码中)在不同的应用程序,并没有问题,所以我真的在这里亏本。
所有帮助将不胜感激。
谢谢,亚当。您正在激活应指向一些目标组件,这是不是在你的情况
我现在已经解决了这个问题。
事实证明,这个问题根本不在ListActivity
课上,实际上是在ColourActivity
课上。
我试图解析onCreate
中的几种颜色,但我忘记了将#包含在RGB颜色字符串之一中,因此崩溃!
感谢大家的帮助,Adam。
当网站允许我这样做时,我会将此答案标记为正确,因为我的声誉太低而无法将其标记为正确答案马上 – 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;
}
尝试用这个,
@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;
}
}
这正是我所期望的。在崩溃之前,我可以在日志中看到它。我甚至尝试将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;
}
谢谢,已经试过这个,我在我的问题中说过。我没有运气 – Adam 2012-07-21 05:20:33
你好adam你的代码似乎是完美的罚款,而我在我的模拟器上测试,请检查是否y您已将类名“ColourActivity”添加到清单文件中。
<activity android:name="ColourActivity"></activity>
是的我有,谢谢,虽然它在我的Mainfest中是“.ColourActivity” – Adam 2012-07-21 05:23:40
如果您可以提供logcat,这将非常有帮助。请尝试... – 2012-07-21 04:55:13
@LaiVung请回顾一下问题中提供的链接,其中概述了我不确定如何去做这件事...... – Adam 2012-07-21 05:19:29
'ColourActivity'是你的活动吗? – 2012-07-21 06:09:55