[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);
}
}
留言
張貼留言