点击Galaxy Samsung S3上的菜单按钮时,java应用程序停止
我的应用程序完全符合我的HTD愿望:
Java代码段:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.plans_screen, menu);
return true;
}
和我的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:安卓="http://schemas.安卓.com/apk/res/安卓" >
<item 安卓:id="@+id/newPlan"
安卓:visible="true"
安卓:title="Neuer Plan"
安卓:onClick="addPlan"></item>
<item
安卓:id="@+id/menu_main_spinner"
安卓:visible="true"
安卓:title="Lade Plan"
安卓:showAsAction="always"></item>
</menu>
但如果我在三星Galaxy S3上运行它,当我点击菜单按钮时,应用程序就会崩溃并停止工作。 三星Galaxy S3是否需要特殊处理
或者我的菜单有什么问题吗
提前感谢,, 汤姆
另请注意Stacktrace:
02-12 20:56:24.090: E/AndroidRuntime(25656): FATAL EXCEPTION: main
02-12 20:56:24.090: E/AndroidRuntime(25656): 安卓.view.InflateException: Couldn't resolve menu item onClick handler addPlan in class com.example.myfitnessapp.PlansScreen
02-12 20:56:24.090: E/AndroidRuntime(25656): at 安卓.view.MenuInflater$InflatedOnMenuItemClickListener.<init>(MenuInflater.java:218)
02-12 20:56:24.090: E/AndroidRuntime(25656): at 安卓.view.MenuInflater$MenuState.setItem(MenuInflater.java:422)
02-12 20:56:24.090: E/AndroidRuntime(25656): at 安卓.view.MenuInflater$MenuState.addItem(MenuInflater.java:456)
02-12 20:56:24.090: E/AndroidRuntime(25656): at 安卓.view.MenuInflater.parseMenu(MenuInflater.java:189)
02-12 20:56:24.090: E/AndroidRuntime(25656): at 安卓.view.MenuInflater.inflate(MenuInflater.java:111)
02-12 20:56:24.090: E/AndroidRuntime(25656): at com.example.myfitnessapp.PlansScreen.onCreateOptionsMenu(PlansScreen.java:146)
02-12 20:56:24.090: E/AndroidRuntime(25656): at 安卓.app.Activity.onCreatePanelMenu(Activity.java:2578)
02-12 20:56:24.090: E/AndroidRuntime(25656): at
[……]
p.p.S
我不使用onclick方法
我的代码如下:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.newPlan:
addPlan();
break;
case R.id.menu_main_spinner:
loadPlan();
break;
}
return super.onOptionsItemSelected(item);
}
我有一些函数调用方法addPlan():
public void addPlan() {
final EditText input = new EditText(PlansScreen.this);
new AlertDialog.Builder(PlansScreen.this)
.setTitle("Erstell einen neuen Plan")
.setMessage("Wie soll der soll der Plan heissen?")
.setView(input)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
Data.plannames.add(value);
Data.trainingsplaene.add(new trainingsplan(value));
spinadapter.notifyDataSetChanged();
Data.currentPlan = Data.trainingsplaene.size()-1;
listadapter=new myListViewAdapter(PlansScreen.this,Data.trainingsplaene.get(Data.currentPlan));
myList2.setAdapter(listadapter);
listadapter.notifyDataSetChanged();
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Do nothing.
}
}).show();
}
# 1 楼答案
根据stacktrace,这似乎是导致问题的原因:
在xml中为菜单项定义onClick方法时,应提供一个名称正确的方法,并将单个MenuItem对象作为参数。引用the docs:
您应该在活动代码中包含以下方法,因为当您在xml中声明onClick时,系统将调用此方法,即使您在代码中也选择了onOptions项:
您最好只使用
onOptionsItemSelected()
,因为该方法应该适用于所有版本的Android,而对于运行姜饼或更低版本的设备,用xml声明onClick将被忽略。作为替代方案,您可以这样做:并从菜单xml中删除onClick声明
# 2 楼答案
刚刚从xml文件中删除了剩余的onClick。。。有时候我觉得自己像个瞎子
但在我的手机上运行并且没有编译错误时,检测到以下错误是愚蠢的:(
谢谢你的帮助!:)
因为我无法将评论标记为解决方案,所以我只是回答:“非常感谢邹祖和2Dee:)