适用于所有活动的Android onOptionsItemSelected(...)侦听器

时间:2012-02-23 14:29:25

标签: java android android-activity handler

我想为所有活动编写一个处理程序。但是我有一个问题:我知道对于这个任务,我必须继承Activity类并覆盖这个处理程序,如下所示:

class MyActivity extends Activity {

    // ...

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // ...
    }
}

但是,当我从Activity和其他MapActivity扩展一些活动时,我必须做些什么?

2 个答案:

答案 0 :(得分:1)

这是不可能的,因为Java中无法实现多重继承,MapActivityActivity无法扩展您控制的类。

您必须在每个基本活动中使用onOptionsItemSelected(MenuItem item)方法,但如果您调用一个共享的单独类,它们可以共享相同的代码。

e.g。

class BaseActivity extends Activity {
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        MenuHelper.handleOnItemSelected(item);
    }
}

class BaseMapActivity extends MapActivity {
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        MenuHelper.handleOnItemSelected(item);
    }
}

class MenuHelper {

   public static void handleOnItemSelected(MenuItem item) {
          // do something..
   }

}

答案 1 :(得分:0)

您可以创建扩展MapActivity的MyMapActivity类,并在onOptionsItemSelected实现中为此和另一个MyActivity调用相同的过程。

或者您可以使用MenuItem.setOnMenuItemClickListener为每个菜单项设置自定义侦听器,并使此侦听器将事件调度到您的过程。