如何在另一个活动中调用此方法?

时间:2014-11-10 19:18:26

标签: java android

在我的主要活动中,我有这个方法:

 public void CancelAlarms() {

            AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            Intent intent = new Intent(context, AlarmReceiver.class);
            pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
            manager.cancel(pendingIntent);
        }

但我想在我的其他活动中调用它。

如何将其从一个活动调用到另一个活动?另外,如果我在方法中使用上下文,它会没用吗?如果我将其从另一个活动称为这个,那么上下文会改变吗?

3 个答案:

答案 0 :(得分:1)

如果要在所有Activity中使public void CancelAlarms()可用,那么创建一个Base Activity类实现此方法,该Activity现在扩展所有Activity with Base Activity类,而不是从任何已扩展的Activity调用此方法基本活动。或者将public void CancelAlarms()方法放在Application类中。现在使用getApplicationContext(),您可以在任何活动或服务中调用此方法。

答案 1 :(得分:1)

您可能应该将此方法移至实用程序类或基本Activity类,这正是您提到的原因:它取决于Context

你只是不会能够在没有引用它所在的Activity实例的情况下调用此方法,因为它没有标记为static。即使你这样做,它也会使用它的主机Activity - 可能不是你想要的。

相反,您可以创建一个包含该方法的实用程序类。有两种方法可以解决这个问题:你可以每次都将Context传递给函数,或者你可以将Context一次传递给类的构造函数。对于分组为Utilities类的一次性便捷方法,前者可能更好,而后者更像Java,如果类具有明确的功能(如ActivityAlarmWrangler)则更好

最后,您可以将该函数移动到基类。对于简单的情况,这将是最干净的,因为您Activity中不必具有不同的成员对象,但如果您的Activity已经扩展了自定义超类,则您将无法使用此方法,除非您愿意修改超类。因为Java没有多重继承(在这种情况下会很有用),继承这个方法可能会很快变得毛茸茸。

答案 2 :(得分:0)

在主要活动中创建/的静态实例。

static MainActivity mainActivity;

在oncreate方法中初始化

@覆盖
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(....);
        mainActivity = this;
    }

并创建一个返回此实例的方法。

public static MainActivity getInstance(){
        return mainActivity;
    }

现在,从其他活动中,您只需按以下方式调用您的方法:

MainActivity.getInstance()CancelAlarms();