gpt4 book ai didi

java - 点击 Galaxy Samsung S3 上的菜单按钮时应用停止

转载 作者:行者123 更新时间:2023-11-30 03:06:27 24 4
gpt4 key购买 nike

我的应用程序在我的 HTD Desire 上完美运行:

Java fragment :

    @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:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/newPlan"
android:visible="true"
android:title="Neuer Plan"
android:onClick="addPlan"></item>
<item
android:id="@+id/menu_main_spinner"
android:visible="true"
android:title="Lade Plan"
android:showAsAction="always"></item>
</menu>

但是如果我在 Samsung Galaxy S3 上运行它,当我点击 Menubutton 时应用程序崩溃并停止工作。三星 Galaxy S3 是否需要特殊处理?

还是我的菜单有问题?

提前致谢,汤姆

附言堆栈跟踪:

02-12 20:56:24.090: E/AndroidRuntime(25656): FATAL EXCEPTION: main
02-12 20:56:24.090: E/AndroidRuntime(25656): android.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 android.view.MenuInflater$InflatedOnMenuItemClickListener.<init>(MenuInflater.java:218)
02-12 20:56:24.090: E/AndroidRuntime(25656): at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:422)
02-12 20:56:24.090: E/AndroidRuntime(25656): at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:456)
02-12 20:56:24.090: E/AndroidRuntime(25656): at android.view.MenuInflater.parseMenu(MenuInflater.java:189)
02-12 20:56:24.090: E/AndroidRuntime(25656): at android.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 android.app.Activity.onCreatePanelMenu(Activity.java:2578)
02-12 20:56:24.090: E/AndroidRuntime(25656): at

[...]

附言

我不使用 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();

最佳答案

根据堆栈跟踪,这似乎是导致问题的原因:

java.lang.NoSuchMethodException: addPlan [interface android.view.MenuItem]

在 xml 中为菜单项定义 onClick 方法时,您应该提供一个具有正确名称的方法,将单个 MenuItem 对象作为参数。引用 the docs :

Android 3.0 adds the ability for you to define the on-click behavior for a menu item in XML, using the android:onClick attribute. The value for the attribute must be the name of a method defined by the activity using the menu. The method must be public and accept a single MenuItem parameter—when the system calls this method, it passes the menu item selected

您应该在 Activity 代码中包含以下方法,因为当您在 xml 中声明 onClick 时系统会调用此方法即使您的代码中也有 onOptionsItemSelected:

public boolean addPlan (MenuItem menuItem){
// Your code here
}

您最好的选择可能是使用only onOptionsItemSelected(),因为该方法应该适用于所有版本的 Android,而设备将忽略在 xml 中声明的 onClick运行 Gingerbread 或更低版本。因此,作为替代方案,您可以这样做:

@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case R.id.profile_edit:
addPlan();
return true;
case R.id. menu_main_spinner:
loadPlan();
return true;
}
}

... 并从您的菜单 xml 中删除 onClick 声明

关于java - 点击 Galaxy Samsung S3 上的菜单按钮时应用停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21738226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com