向多个活动添加相同的上下文菜单
Posted
技术标签:
【中文标题】向多个活动添加相同的上下文菜单【英文标题】:Adding the same context menu to multiple activities 【发布时间】:2011-06-21 02:46:39 【问题描述】:我试图弄清楚如何在多个活动中包含常见的代码。
更具体地说,我有一个上下文菜单,我想将它包含在几个活动中。 我看到了这一点,但只是不明白如何扩展到多个活动。 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;
【问题讨论】:
【参考方案1】:如果您想在超过 1 个活动中添加相同的功能而不是创建 1 个通用活动 像 BaseActivity 并扩展该活动将在您继承的所有活动中包含该常用功能
例如我调用了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);
【讨论】:
谢谢大家!这些真的很有帮助。我最终使用了 BrennaSoft 的 xml 示例。然后 djk 的主屏幕/基本活动示例来清理我的代码很多。 我需要在AndroidManifest.xml
中声明BaseActivity吗?还是不需要这个?【参考方案2】:
您可以在 xml 文件中定义一个菜单,然后在 onCreateOptionsMenu 中加载该菜单。您仍然需要处理每个活动中的每个菜单项。您还可以创建一个 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);
【讨论】:
【参考方案3】:尝试使用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
我认为这可以帮助你。
【讨论】:
以上是关于向多个活动添加相同的上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 org.eclipse.ui.menus 向 Eclipse Package Explorer 上下文菜单项添加子菜单条目?
markdown Mac os上下文菜单服务:向mac os上下文菜单添加新服务
带有多个 qlineedit 小部件的 pyqt 上下文菜单