0

我有两个活动称为Activity_AActivity_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

我怎样才能做到这一点?

编辑: 我发现了这个问题并根据“丰富”扩展Activity_AActivity_B. 但问题是Activity_B一个列表活动,我已经用ListActivity.

和其他答案创建一个实例Activity_A然后调用方法。如果我这样做,所有变量都将变为空或为空Activity_A。而且我不想制作静态方法。

有没有其他方法可以在不创建静态引用或另一个实例的情况下做到这一点?

4

3 回答 3

1

getApplicationContext 将为您提供一个类型为 Application 而不是 Activity 的类。所以这不起作用,你必须存储一个静态的活动上下文,然后调用这个方法。如果您发布您正在尝试做的事情的详细信息,那么有人会提出解决方案

于 2012-08-06T09:36:41.397 回答
0

我假设您Activity_A来自 Activity 而不是来自 Application。getApplicationcontext()返回应用程序,而不是活动。

如果您想printNumber()从任何活动中使用您的,请将其放入应用程序或服务中。

于 2012-08-06T09:41:02.893 回答
0

应用程序上下文是比您的任何一个活动都更高级别的构造。

活动 A 不是活动 B 的父项。

活动之间的“直接”通信只能通过

仅通过通过 startActivity 或 startActvityForResult 触发的 Intent 从 A 到 B

B 只能与 A 通信,如果它已被 startActivityForResult 调用,然后被响应

在活动A中覆盖以下方法 public void onActivityResult(int requestCode, int resultCode, Intent data)

在活动 B 中,最后呼吁

http://developer.android.com/reference/android/app/Activity.html#setResult(int )

于 2012-08-06T09:43:15.580 回答