簡體   English   中英

按下Galaxy Samsung S3上的菜單按鈕時,應用程序停止

[英]App stops when hitting menu button on Galaxy Samsung S3

我的應用程序可以在我的HTD Desire上完美運行:

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>

但是,如果我在Samsung Galaxy S3上運行它,則當我按下Menubutton時,應用程序將崩潰並停止工作。 三星Galaxy S3是否需要特殊處理?

還是菜單有問題?

預先感謝,湯姆

PS Stacktrace:

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 

[...]

PPS

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

}

根據stacktrace,這似乎是導致問題的原因:

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

在xml中為菜單項定義onClick方法時,應提供一個具有正確名稱的方法,並以單個MenuItem對象作為參數。 引用文檔

Android 3.0使用android:onClick屬性為您提供了以XML定義菜單項的點擊行為的功能。 該屬性的值必須是活動使用菜單定義的方法的名稱。 該方法必須是公共的,並且接受單個MenuItem參數-系統調用此方法時,它將傳遞選定的菜單項

您應該在“活動”代碼中包括以下方法,因為當您在xml中聲明onClick時,系統會調用此方法, 即使您的代碼中也有onOptionsItemSelected

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

最好的選擇是使用onOptionsItemSelected() ,因為該方法在所有版本的Android上均適用,而對於運行Gingerbread或更低版本的設備,在xml中聲明onClick將被忽略。 因此,您可以執行以下操作:

@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聲明

剛剛從xml文件中刪除了剩余的onClick ...有時我感覺很盲目!

但是當我在手機上運行並且沒有編譯錯誤時,檢測到它是愚蠢的:(

謝謝您的幫助! :)

由於我無法將評論標記為“解決方案”,因此我剛剛回答了,非常感謝ZouZou和2Dee :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM