3

我正在制作我的第一个 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();

请问有什么帮助吗?谢谢!

4

3 回答 3

4

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

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

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

例如,在您的NewIncome活动中,您可以拥有

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

然后,您可以通过调用从任何其他活动启动此活动

NewIncome.Launch(this);

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

于 2013-10-13T11:50:17.267 回答
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....
          ...
    }


}
于 2013-10-13T12:24:18.493 回答
1

如果您的 8 个类是活动,您可以定义一个基本活动,onOptionsItemSelected它是您将元素放入所需操作栏中的活动。然后使其他活动从中派生。

于 2013-10-13T17:00:11.763 回答