我有两个名为Activity_A
和Activity_B
的活动。我在Activity_A中有一个方法或函数,如:
public void printNumber (int i) {
for(int j = 0; j <= i; j++) {
Log.w("TAG", "Print number is: " + j);
}
}
现在我想从另一个名为Activity_B的活动中调用此方法。
我试图使用以下行来调用此方法:
((Activity_A) this.getApplicationContext()).printNumber();
我在Activity_B的onCreate中编写了这一行,这将使我的应用程序崩溃并且logcat显示此错误:
java.lang.ClassCastException: android.app.Application cannot be cast to com.example.app.Activity_A
我该怎么做?
修改:我发现了this个问题,并根据“Rich”将Activity_A
扩展为Activity_B
。但问题是Activity_B
是一个列表活动,我已经使用ListActivity
对其进行了扩展。
和其他答案创建Activity_A
的实例,然后调用方法。如果我这样做,则所有变量变为空或Activity_A
为空。而且我不想制作静态方法。
有没有其他方法可以在不创建静态引用或其他实例的情况下执行此操作?
答案 0 :(得分:1)
getApplicationContext将为您提供Application not Activity类型的类。所以这不会起作用,你必须存储一个静态的活动上下文然后调用这个方法。如果您发布了您想要做的事情的详细信息,那么有人会建议解决方案
答案 1 :(得分:0)
我假设您的Activity_A
派生自Activity而非Application。 getApplicationcontext()
返回应用程序,而不是活动。
如果您想使用任何活动中的printNumber()
,请将其放入应用程序或服务中。
答案 2 :(得分:0)
应用程序上下文是比您的任何一个活动更高级别的构造。
活动A不是活动B的父级。
活动之间的“直接”沟通只能通过
实现从A到B只能通过Intent触发 startActivity或startActvityForResult
如果已经使用startActivityForResult进行调用,则B只能与A进行通信,然后通过
进行响应在活动A中覆盖以下方法 public void onActivityResult(int requestCode,int resultCode,Intent data)
在活动B中,最后致电
http://developer.android.com/reference/android/app/Activity.html#setResult(int)