[Android] 如何讓不同Activity共用相同的Menu
在Activity加入Menu一文中簡單介紹了如何建立選單,但是在開發Android Application常常遇到一個情況:一個Menu被多個Activity所共用,意思是指這些Activity在執行時,User按下Menu鍵時,都會顯示同一個選單。
要達成上述目的不需要每個Activity都去覆寫onCreateOptionMenu以及onOptionsItemSelected,由於Menu的結構與item按下的處理動作都一致,因此可以善用繼承的特性,先建立一個類別負責實作Menu的建立以及動作處理函式,再讓所有共用Menu的Activity繼承它,就可以達到一個Menu讓多個Activity共用的效果。
程式碼說明:
1. 建立實作onCreateOptionMenu and onOptionsItemSelected的父類別
2. 所有共用Menu的Activity繼承已實作Menu的父類別
要達成上述目的不需要每個Activity都去覆寫onCreateOptionMenu以及onOptionsItemSelected,由於Menu的結構與item按下的處理動作都一致,因此可以善用繼承的特性,先建立一個類別負責實作Menu的建立以及動作處理函式,再讓所有共用Menu的Activity繼承它,就可以達到一個Menu讓多個Activity共用的效果。
程式碼說明:
1. 建立實作onCreateOptionMenu and onOptionsItemSelected的父類別
public class ActivityWithMenu extends Activity{ @Override public boolean onCreateOptionsMenu(Menu menu){ MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.option_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // 針對 item selection id 進行動作處理 switch (item.getItemId()) { case R.id.add: Toast.makeText(this, "Add action", Toast.LENGTH_SHORT).show(); return true; case R.id.buy: Toast.makeText(this, "Buy action", Toast.LENGTH_SHORT).show(); return true; default: return super.onOptionsItemSelected(item); } } }
2. 所有共用Menu的Activity繼承已實作Menu的父類別
public class AnotherActivity extends ActivityWithMenu { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
留言
張貼留言