Android的:如何在每个(列表)活动,而无需重新编写覆盖的方法共享菜单吗?
-
18-09-2019 - |
题
我知道Android提供,以限定一个菜单被覆盖一些有用的方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
// ...
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
Intent i;
switch (item.getItemId()) {
case AIS: i = new Intent(this, ActivityInventorySheet.class);
startActivity(i);
return true;
// ...
}
return false;
}
我想有该菜单通过我的Android应用程序的每个活动和ListActivity共享。这对于具有在每个(列表)的活动,以允许用户跳转到点击内的应用程序的每一部分一个标准菜单。
现在,实现这一目标的最简单的方法是复制和粘贴在应用程序中的每一个(列表)活动这两种方法。我不喜欢的代码这种冗余写成:)
时子类合理选择?我已经看到,子类我ListActivity的人不很好地工作(线程从数据库中检索对象是给问题)。 是否有其他的方式来分享一个菜单虽然活动?
由于
解决方案
我看不出有任何理由,这将并不完美:
public abstract class MyListActivity extends ListActivity
{
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
// ...
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent i;
switch (item.getItemId()) {
case AIS: i = new Intent(this, ActivityInventorySheet.class);
startActivity(i);
return true;
// ...
}
return false;
}
}
然后,只需有你的活动扩展,而不是ListActivity MyListActivity。
我已经看到,子类化 我ListActivity的一个不工作 非常好(线程检索 从数据库对象给予 问题)。
这听起来像一个完全不同的问题。你可能会想张贴这方面一个单独的问题。简单地扩展在Java类不应该创建一个像你所描述的一个的任何问题。
其他提示
我用静态方法一个辅助类初始化和处理共同的菜单选项,则每个活动定义了自己onCreateOptionsMenu
等,其代表常见任务的辅助类,并且可以添加特定于该活动进一步的菜单项。
像
的东西class SharedMenu {
public static void onCreateOptionsMenu(Menu menu) {
menu.add(...);
menu.add(...);
}
}
public class MyActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(...); // specific to this activity
SharedMenu.onCreateOptionsMenu(menu);
return true;
}
}
有用于onMenuItemSelected
等多种方法。
编辑:我不使用一个共同的基类,因为我需要他们两个人下手,一为活动,另一个用于列表的活动,然后在我的情况,我需要一些添加自定义菜单选项活动。
我只是增加了一个功能, GreenDroid 来管理。可以说是相当有用的,检查出来。 我会尝试后发布一个例子。
不隶属于 StackOverflow