将相同的上下文菜单添加到多个活动

我想弄清楚如何在多个活动中包含常见的代码段。

更具体地说,我有一个上下文菜单,我想在几个活动中包括。 我看到了这一点,但只是不明白如何扩展到多个活动。 http://developer.android.com/guide/topics/ui/menus.html

我有这个设置为Menu.java

public class Menu extends Activity{ // bottom menus public static final int Menu1 = 1; public static final int Menu2 = 2; public static final int Menu3 = 3; public static final int Menu4 = 4; public static final int Menu5 = 5; public static final int Menu6 = 6; public static final int Menu7 = 7; // / Creates the menu items public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, Menu3, 0, "Create Profile").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_add)); menu.add(0, Menu5, 0, "Log In").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_login)); menu.add(0, Menu2, 0, "Settings").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_preferences)); menu.add(0, Menu4, 0, "About").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_help)); menu.add(0, Menu1, 0, "Report A Bug").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_start_conversation)); menu.add(0, Menu6, 0, "New Stuff").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_view)); return true; } private MenuItem add(int i, int menu32, int j, String string) { // TODO Auto-generated method stub return null; } // Handles item selections from preference menu @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu1: startActivity(new Intent(this, Bug.class)); return true; case Menu2: startActivity(new Intent(this, EditPreferences.class)); return true; case Menu3: startActivity(new Intent(this, CreateAccount.class)); return true; case Menu4: startActivity(new Intent(this, About.class)); return true; case Menu5: startActivity(new Intent(this, Login.class)); return true; case Menu6: startActivity(new Intent(this, NewAdditions.class)); return true; } return false; } } 

Solutions Collecting From Web of "将相同的上下文菜单添加到多个活动"

如果要在多个活动中添加相同的function,而不是像BaseActivity那样创build1个常见活动,并且扩展该活动,那么将在inheritance的所有活动中包含这些常用function

例如我已经调用了checklogin函数,你可以把你的菜单代码放在这里,

 public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); settings = getSharedPreferences(PREFS_NAME, 0); if (IsFullScreen) { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } this.CheckLogin(); } // Check login function // Your menu code } 

现在你可以在你的活动中扩展它

 public class MainScreen extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.setContentView(R.layout.mainscreen); } } 

您可以在xml文件中定义菜单,然后在onCreateOptionsMenu中加载菜单。 您仍然需要处理每个活动中的每个菜单项。 您也可以创build一个BaseActivity类来处理每个Activity可以扩展的菜单。

 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/about" android:title="About" android:icon="@drawable/ic_menu_about"/> <item android:id="@+id/search" android:icon="@drawable/ic_menu_search" android:title="Search"></item> <item android:id="@+id/my_location" android:title="My Location" android:icon="@drawable/ic_menu_mylocation"> </item> </menu> public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); return super.onCreateOptionsMenu(menu); } 

尝试使用abstract

  abstract class BaseMenu extends Activity { //Initialize your menus // bottom menus public static final int Menu1 = 1; public static final int Menu2 = 2; public static final int Menu3 = 3; public static final int Menu4 = 4; public static final int Menu5 = 5; public static final int Menu6 = 6; public static final int Menu7 = 7; // / Creates the menu items public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, Menu3, 0, "Create Profile").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_add)); menu.add(0, Menu5, 0, "Log In").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_login)); menu.add(0, Menu2, 0, "Settings").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_preferences)); menu.add(0, Menu4, 0, "About").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_help)); menu.add(0, Menu1, 0, "Report A Bug").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_start_conversation)); menu.add(0, Menu6, 0, "New Stuff").setIcon( this.getResources().getDrawable(R.drawable.ic_menu_view)); return true; } private MenuItem add(int i, int menu32, int j, String string) { // TODO Auto-generated method stub return null; } // Handles item selections from preference menu @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu1: startActivity(new Intent(this, Bug.class)); return true; case Menu2: startActivity(new Intent(this, EditPreferences.class)); return true; case Menu3: startActivity(new Intent(this, CreateAccount.class)); return true; case Menu4: startActivity(new Intent(this, About.class)); return true; case Menu5: startActivity(new Intent(this, Login.class)); return true; case Menu6: startActivity(new Intent(this, NewAdditions.class)); return true; } return false; }} 

现在扩展类BaseMenu而不是Activity

我认为这可以帮助你。