2013-04-02 43 views
2

我想爲我的所有活動只有一個菜單。我不想在我的所有活動中重複我的菜單代碼(下面)。不要重複菜單代碼

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.referent, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId()) { 
    case R.id.action_settings: 
     System.out.println("set"); 
     return true; 
    case R.id.action_alert: 
     System.out.println("alert"); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

我讀了一些主題,但我發現只有一個解決方案女巫是擴展宣佈菜單的父類。我不能使用這個解決方案,因爲我所有的活動都沒有擴展Activity,我也有FragmentActivityListActivity

是否有解決方案在每個活動上都有相同的菜單,在每個活動上編寫最少的代碼?

+0

看看這個 - http://stackoverflow.com/questions/ 8727622/general-constant-menu-in-the-application – Shade

+0

謝謝,但在你的鏈接中他們使用的是擴展或片段,我不想爲了兼容性的原因使用片段。 – Ajouve

+0

組合而不是繼承?只需將'item'和其他需要的參數傳遞給具有共同邏輯的另一個對象中的方法。 – whyleee

回答

4

根據什麼處理代碼的菜單,從當前活動需要訪問的擴展,你可以創建一個類,它的唯一責任是處理選擇菜單項。可能即使只是一個靜態方法,收到MenuItem

例如,修改等活動的onOptionsItemSelected是:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    boolean handled = MenuHandler.onOptionsItemSelected(item); 
    if (!handled) { 
     handled = super.onOptionsItemSelected(item); 
    } 
    return handled; 
} 

並創建MenuHandler類:

public class MenuHandler { 
    public static boolean onOptionsItemSelected(MenuItem item) 
    { 
     // Handle item selection 
     switch (item.getItemId()) { 
     case 1: //R.id.action_settings: 
      System.out.println("set"); 
      return true; 
     case 2: //R.id.action_alert: 
      System.out.println("alert"); 
      return true; 
     default: 
      return false; //allow default processing 
     } 
    } 
} 
+0

感謝您的幫助 – Ajouve

0

所有你需要的是從一個主類

public abstract class main extends activity(){ 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
// put your common menu code 

super.onOptionsItemSelected(item); 
} 

} 
public class HelloActivity extends main{ 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
super.onOptionsItemSelected(item); 
} 
} 
+0

他在問題中明確表示他不能使用Activity類的子類。 – Shade