2011-06-10 310 views
1

我在圖書館裏有一個活動,裏面有一個菜單。該菜單具有所有標準屬性以及onCreateOptionsMenu和onOptionsItemSelected上的@Override。覆蓋覆蓋?

在我上面導入庫的實際項目中,我有另一個活動延伸到上面的活動。對於這個程序的這個特定的實現,我想在這個活動上有一個不同的菜單,所以在這個活動代碼庫中添加onCreateOptionsMenu和onOptionsItemSelected以及合適的@Override,但是我從庫中獲得菜單,而不是庫中的覆蓋。

我會做什麼錯?

基類:

public class ListItems extends ListActivity { 
    public static final int LOGOUT = 0; 
    public static final int HISTORY = 1; 
    public static final int REFRESH = 2; 


@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    menu.add(0, LOGOUT ,0,"Log Out"); 
    menu.add(0,HISTORY,0,"Order History"); 
    menu.add(0,REFRESH,0,"SMS"); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected (MenuItem item){ 
    TextView textView = (TextView)findViewById(com.imobileminutes.library.R.id.text); 
    switch (item.getItemId()){ 
     case LOGOUT: 
      Intent logOut = new Intent(ListItems.this,MainScreen.class); 
      startActivity(logOut); 
      finish(); 
      return true; 
     case HISTORY: 
      Intent orderHistory = new Intent(this,OrderItems.class); 
      startActivity(orderHistory); 
      return true; 
     case REFRESH: 
      Intent orderHistory = new Intent(this,OrderItems.class); 
      startActivity(orderHistory); 
      return true; 
} 
    return false; 
} 
} 

覆蓋類

public class ListItems extends com.imobileminutes.library.ListItems { 
    static final int SMS = 2; 


@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    Log.d("onCreateOptionsMenu", "My onCreateOptionsMenu ran"); 
    Toast.makeText(getApplicationContext(), "HEllo Menu Created", Toast.LENGTH_LONG).show(); 
    super.onCreateOptionsMenu(menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected (MenuItem item){ 
    Log.d("onCreateOptionsMenu", "My onOptionsItemSelected ran"); 
    Toast.makeText(getApplicationContext(), "HElloonOptionsItemSelected", Toast.LENGTH_LONG).show(); 

    super.onOptionsItemSelected(item); 
    return false; 
} 

}

結論 它結束了,我的庫調用ListItems.this和的createAccount這是指圖書館中不在擴展類中的活動。

我爲每個擴展活動類型添加了一個意圖,並且nwo調用它,從而引發擴展活動而不是基本活動。

感謝您的幫助球員。

+3

如何知道您是否不向我們展示您的代碼? – 2011-06-10 19:40:47

+0

仍然需要查看更多代碼以及如何調用它。 – Woot4Moo 2011-06-10 20:09:52

+0

它的一個菜單,我按菜單按鈕 – 2011-06-10 20:12:56

回答

0

在導入中使用完全限定的名稱我懷疑你引用了錯誤的類。

+0

如果我拿掉override類中的所有東西,只留下空括號,它可以在每個Base類中正常工作,因此引用工作正常。 – 2011-06-10 20:14:21

1

要麼你沒有代碼複製並粘貼正確,或者是問題的一部分是在你的基地類,它提供了相同的定義onCreateOptionsMenu爲您的派生類:

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    menu.add(0, LOGOUT ,0,"Log Out"); 
    menu.add(0,HISTORY,0,"Order History"); 
    menu.add(0,REFRESH,0,"SMS"); 
    return true; 
} 

這最後行不可能是正確的 - 我敢肯定,基類實現的最後一行應該是:menu.add(0,REFRESH,0,"REFRESH");

onCreateOptionsMenu最後一行還需要在派生類中被改變:

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    menu.add(0, LOGOUT ,0,"Log Out"); 
    menu.add(0, HISTORY,0,"Order History"); 
    menu.add(0, SMS,0,"SMS"); // Use the correct constant (SMS instead of REFRESH) 
    return true; 
} 

編輯:此外,還可以簡化代碼一點,通過重複使用這些超類實現你正在複製超類代碼(LOGOUT和HISTORY)的選項:

@Override 
public boolean onOptionsItemSelected (MenuItem item){ 
    TextView textView = (TextView)findViewById(com.imobileminutes.library.R.id.text); 
    // Left this as a 'switch'; you might want to use an 'if' instead. 
    switch (item.getItemId()){ 
    case SMS: 
     AppClass.sendSMS("8135551212", "Hello Jason"); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

是的,我沒有正確地拷貝它,因爲我已經修正了它 – 2011-06-10 20:26:58

+0

@Jason Carter:好的,你在'onCreateOptionsMenu'的基類定義中看起來像一個轉錄錯誤 - 看最後一行。 – 2011-06-10 20:33:19

+0

@Jason Carter:對於這個問題,'onOptionsItemSelected'中開關的最後兩種情況是相同的。正如您現在可能已經發現的,直接複製粘貼比嘗試重新輸入代碼要好得多:您提供的代碼越精確,答案就越準確。 – 2011-06-10 20:37:23

0

原來,這是我調用活動的方式。我直接在庫中調用Activity而不是調用覆蓋的Activity。由於被覆蓋的將根據應用程序命名而動態化,因此我最終使用Intents來搜索調用者程序包名稱並將特定的意圖附加到它上面。

只要我把所有的設置,我的短信菜單項顯示。