6

我知道 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 应用程序的每个 Activity 和 ListActivity 共享这个菜单。这是为了在每个(列表)活动中都有一个标准菜单,让用户可以通过单击跳转到应用程序的每个部分。

现在,实现这一点的最简单方法是在应用程序的每个(列表)活动中复制并粘贴这两种方法。我不喜欢这种冗余的代码编写:)

子分类是一个合理的选择吗?我已经看到对我的 ListActivity 之一进行子类化并不能很好地工作(从数据库中检索对象的线程会出现问题)。还有其他方法可以通过活动共享菜单吗?

谢谢

4

3 回答 3

12

我使用一个带有静态方法的助手类来初始化和处理常见的菜单选项,然后每个 Activity 定义自己的onCreateOptionsMenu等,将常见的任务委托给助手类,并且可以添加更多特定于该 Activity 的菜单项。

就像是

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等。

编辑:我没有使用公共基类,因为我需要其中两个开始,一个用于活动,另一个用于列表活动,然后在我的情况下,我需要在某些活动上添加自定义菜单选项。

于 2010-01-05T14:22:37.540 回答
9

我看不出有什么理由不能完美地工作:

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;
   }    
}

然后让您的活动扩展 MyListActivity 而不是 ListActivity。

我已经看到对我的 ListActivity 之一进行子类化并不能很好地工作(从数据库中检索对象的线程会出现问题)。

这听起来像是一个完全不同的问题。您可能想就此发表一个单独的问题。简单地在 Java 中扩展一个类不应该产生像您所描述的那样的任何问题。

于 2010-01-05T14:20:42.847 回答
1

我刚刚向GreenDroid添加了一项功能来管理它。可能很有用,看看吧。稍后我会尝试发布一个示例。

于 2011-08-16T11:36:34.430 回答