2012-02-04 43 views
0

我正在實現一個Android活動,其中將從其中派生其他活動。所以基本上我有一個InventoryActivity的這個設置,它的父類,ListActivity:Android onCreateOptionMenu不被調用

public class MyListActivity extends Activity { 
    protected Context mContext; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mContext = this.getBaseContext(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.options, menu); 
     Log.d("Creating options menu", "True"); 
     return true; 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     Log.d("Preparing options menu", "True"); 
     return super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.save: 
      return(true); 

      case R.id.revert: 
      return(true); 
     } 

     return(super.onOptionsItemSelected(item)); 
    } 
} 


public class InventoryActivity extends MyListActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.inventory); 
    } 
} 

而且我也有這個在options.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/card_list_save" 
      android:icon="@drawable/ic_menu_save" 
      android:title="Save"/> 
    <item android:id="@+id/card_list_revert" 
      android:icon="@drawable/ic_menu_revert" 
      android:title="Revert" /> 
</menu> 

如果必要的話,我這是爲inventory.xml佈局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <Button 
     android:id="@+id/callSearch" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Search"/> 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:id="@+id/inventory"/> 
    </ScrollView> 
</LinearLayout> 

但是,當我按下菜單按鈕時,什麼也沒有發生。 onCreateOptionsMenu方法中的日誌消息不會出現。相反,所有我能看到的是以下內容:

02-04 11:36:58.313: W/KeyCharacterMap(31464): No keyboard for id 0 
02-04 11:36:58.313: W/KeyCharacterMap(31464): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 

但是令我感到困惑最深的是,這個代碼在其他的活動,比如我的發射活動。但是通過面向對象編程的概念,InventoryActivity應該調用MyListActivity中的覆蓋方法。我完全陷入困境,需要幫助。

回答

0

嗯...不知道爲什麼,但刪除onCreate方法在MyListActivity修復了這個問題。所以這個類現在看起來像這樣:

public class MyListActivity extends Activity { 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.options, menu); 
     Log.d("Creating options menu", "True"); 
     return true; 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     Log.d("Preparing options menu", "True"); 
     return super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.save: 
      return(true); 

      case R.id.revert: 
      return(true); 
     } 

     return(super.onOptionsItemSelected(item)); 
    } 
} 
3

ListActivity已經是Android SDK中的一個類。我的猜測是你正在導入android.app.ListActivity,而不是你的包。

+0

我的不好,我不想顯示實際的類名,所以我任意命名它爲'ListActivity'。我將其更改爲「MyListActivity」。 – Dan 2012-02-04 17:54:10

+0

嗯......然後我不確定這裏發生了什麼事。我將所有代碼複製到一個測試項目中,並且一切按預期工作(日誌打印和菜單顯示)。我注意到,當它應該是R.id.card_list_save時,你引用R.id.save,但我懷疑這就是它。嗯... – 2012-02-04 23:16:45

相關問題