如何在其他类的MainActivity中调用(和使用)onOptionsItemSelected

时间:2013-10-13 11:38:22

标签: android android-intent android-actionbar android-optionsmenu

我正在制作我的第一个Android应用程序,但我遇到了一个问题。 我有超过8个不同的类,它们都使用相同的操作栏。 现在代替在每个不同的类中调用方法(并且有很多双重代码),我想在其他类中调用主类的方法。

这是我在main.java中的onOptionsItemSelected代码的一部分

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
        switch (item.getItemId()) {
        case R.id.actionbar_new_income:
            Intent newIncome = new Intent(this, NewIncome.class);
            this.startActivity(newIncome);
            return true;
} 
}

现在我想知道如何在另一个类中调用该方法(newIncome.java) 到目前为止我有这个,但它一直说我需要添加参数。我当然需要能够检测出哪个菜单项被点击了..

MainActivity main = new MainActivity();
        main.onOptionsItemSelected();

请帮忙吗? 谢谢!

3 个答案:

答案 0 :(得分:3)

你不应该这样做。如果您有共同的代码,则将其放入可由任何需要它的活动访问的类(而不是活动)中。

你仍然会有一些重复,但这是正常的。

减少活动启动代码的一种好方法是为每个可以调用的活动添加一个静态方法,以启动它所在的活动。

例如,您可能拥有的NewIncome活动

Public static void Launch(Context c) {
    Intent newIncome = new Intent(c, NewIncome.class);
    C.startActivity(newIncome);  
}

然后,您可以通过调用

从任何其他活动启动此活动
NewIncome.Launch(this);

如果需要,您可以向方法添加参数,然后使用这些参数将Extras添加到Activity中。

答案 1 :(得分:1)

如果您的菜单条目完全独立于包含它们的活动,您可以像以下示例那样执行此操作:

在每项活动中

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  return CommonClass.HandleMenu(this, item.getItemId());
}

在一个普通的班级

public class CommonClass {

    public boolean HandleMenu (Context c, int MenuEntry) {
        switch (MenuEntry) {
           case R.id.actionbar_new_income:
             NewIncome.Launch(c);
          etc....
          ...
    }


}

答案 2 :(得分:1)

如果您的8个类是活动,您可以使用onOptionsItemSelected定义基本活动,该活动是您将元素放在所需操作栏中的活动。然后让其他活动从中衍生出来。