我试图通过单击菜单按钮调用startActivity(myIntent),但我的应用程序在此时崩溃.
从常规按钮单击开始,相同的startActivity调用工作正常,因此,我假设菜单按钮缺少有关上下文的信息?或许我在这里完全不合适.
那么......将菜单项带到特定活动的正确方法是什么?
我已根据最初的建议修改了我的代码.仍然在同一个地方崩溃.调试器不会输入异常子句,应用程序就会死掉.
[编辑代码链接]
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
try{
switch (item.getItemId()) {
case R.id.menuItemLang:
startActivity(new Intent("com.my.project.SETTINGS"));
return true;
default:
return super.onOptionsItemSelected(item);
}
}catch(Exception e){
log(e);
}
}
Run Code Online (Sandbox Code Playgroud)
bra*_*oly 45
第一种选择
您必须覆盖onOptionsItemSelectedActivity中的方法,该方法在用户单击"选项"菜单中的项目时调用.在该方法中,您可以检查已单击的项目.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_item1:
Intent intent = new Intent(this, ActivityForItemOne.class);
this.startActivity(intent);
break;
case R.id.menu_item2:
// another startActivity, this is for item with id "menu_item2"
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
也有onContextItemSelected类似的方法,但对于上下文菜单(我不确定,你的意思是什么菜单).
有关更多信息,请访问http://developer.android.com/guide/topics/ui/menus.html
编辑:
第二种选择
我认为第一个选项更容易,但是从我看到的代码中,您希望将活动作为一个动作启动(因为构造函数中的String参数Intent).为此,您需要在AndroidManifest.xml中指定一个操作.所以,如果我要开始活动ActivityForItemOne(从前面的例子开始)<application>,AndroidManifest.xml中的元素将如下所示:
<application ...>
...
<activity android:label="Activity For First Item" android:name=".ActivityForItemOne">
<intent-filter>
<action android:name="my.app.ITEMONE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
而且Intent将是:
Intent intent = new Intent("my.app.ITEMONE");
Run Code Online (Sandbox Code Playgroud)
这my.app.是您的应用程序包.没有必要使用您的应用程序包,但建议采用独特的操作.
更多信息:
希望这能解决你的问题.
| 归档时间: |
|
| 查看次数: |
74578 次 |
| 最近记录: |