[android]应用程序停止时打 menu button 上银河三星 S3

标签: Java Android Galaxy
发布时间: 2017/3/11 20:41:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我的应用程序在我 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: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>

但是,如果三星 Galaxy S3 上运行该应用程序崩溃,并停止工作上方的时候。 三星 Galaxy S3 是否需要一些特殊的待遇?

或有什么错在我 Menu 吗?

谢谢你提前汤姆

P.S.栈跟踪︰

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 

[...]

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);
  }

我有 funtcioning 方法 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:

根据栈跟踪,这是什么似乎会导致此问题︰

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

当定义 onClick 方法 menu 项目在 xml ,你应该提供正确的名称,一种方法,采取单 MenuItem 作为参数的对象。引用的文档

Android3.0 添加为您定义的点击行为能力 menu 项目在 XML ,使用 android : onClick 属性。属性的值必须是所定义的方法的名称 activity 使用 menu 。该方法必须是公共的接受单个 MenuItem 参数 — — 系统调用此方法时,它将传递 menu 选定项

你应该包括下面的方法在你 Activity 代码,这将由系统调用,当你声明在 onClick xml 即使你也有自动调用您的代码中

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

你最好打赌可能会使用 onOptionsItemSelected() ,因为该方法应该工作在所有版本的 Android 而宣布在 onClick xml 将会忽略运行姜饼的设备或更低。所以,作为替代方法,您可以这样做︰

@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;
    }
}

...和移除 onClick 声明从你 menu xml

官方微信
官方QQ群
31647020