Android的:如何在每个(列表)活动,而无需重新编写覆盖的方法共享菜单吗?

StackOverflow https://stackoverflow.com/questions/2006457

我知道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 来管理。可以说是相当有用的,检查出来。 我会尝试后发布一个例子。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top