方案:公共基類
public class BaseActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.common_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings: startActivity(new Intent(this, SettingsActivity.class)); return true;
case R.id.menu_help: showHelpDialog(); return true;
default: return super.onOptionsItemSelected(item);
}
}
}
子類繼承
public class MainActivity extends BaseActivity { ... }
public class DetailActivity extends BaseActivity { ... }
進階:Fragment 共用菜單
// Fragment 中
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true); // 關鍵:聲明參與菜單
}
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
}
@Override public boolean onOptionsItemSelected(MenuItem item) { ... }
注意
- 基類使用
AppCompatActivity 保證兼容性。
- 子類若需擴展菜單,重寫
onCreateOptionsMenu 先調用 super.onCreateOptionsMenu(menu) 再添加項目。