Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在其他活动中调用此方法?_Java_Android - Fatal编程技术网

Java 如何在其他活动中调用此方法?

Java 如何在其他活动中调用此方法?,java,android,Java,Android,在我的主要活动中,我有以下方法: public void CancelAlarms() { AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); pendingIntent = PendingIntent

在我的主要活动中,我有以下方法:

 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);
        }
但我想在我的其他活动中称之为


如何从一个活动调用另一个活动?另外,如果我在方法中使用上下文,可以吗?如果我把它从另一个活动称为这个活动,上下文会改变吗

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

您可能应该将此方法移动到实用程序类或基本
活动
类,原因正是您提到的:它取决于
上下文

如果没有对活动实例的引用,您将无法调用此方法,因为它没有标记为
static
。即使您这样做了,它也会使用它的主机
活动
——可能不是您想要的

相反,您可以创建一个包含该方法的实用程序类。有两种方法可以实现这一点:您可以每次将
上下文
传递到函数中,也可以将
上下文
传递给类的构造函数一次。前者可能更适合于分组到
实用程序
类中的一次性方便方法,而后者更像Java,如果类具有明确的函数(如
ActivityAlarmWrangler
)则更好

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

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

静态主活动主活动

在oncreate方法中初始化它

@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(..);
main活动=此;
}

并生成一个返回此实例的方法

公共静态MainActivity getInstance(){
返回主活动;
}

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


MainActivity.getInstance().CancelAlarms()

如果我创建了一个新的基本活动,并让主活动和其他活动从中扩展,我如何确保我在正确的上下文中传递给基本活动?它将自动发生。。。继承使方法“出现”在每个子类中。
活动
上下文
的一种类型(子类),因此当需要传递
上下文
时,只需传递
活动
的子类,例如基本活动,也可以强制转换为
上下文
。例如,您可以(在基类中)编写
Intent-Intent=new-Intent(这是AlarmReceiver.class)。哦,谢谢。实际上,我在想我可能需要MainActivity的上下文,而不是我的OtherActivity上下文,这就是我现在所说的。但是,由于我在cancel alarms中有所有必要的信息,比如挂起的意图,所以在我设置它时,它应该只取消所有具有该意图的报警。