在我开发的App中,我有2项活动, ActA 和 ActB 。
ActA是第一个被展示的人。
我们可以说 ActA 就像SplashScreen一样。
在 ActA 内部,我会在 ActB 中检索一些数据,以执行某些任务。
当这些数据被重新启动时,我可以调用一个Intent来执行切换到 ActB 。
问题在于: ActB 扩展 ActA ,因为它需要 ActA 重新审核的数据来执行其任务。
可能就是这样,在 ActB 被调用的那一刻, ActA 方法" OnCreate"被叫到。
这会创建一个循环因为 ActA 开始重新检索其他数据并再次调用ActB。所以我的应用程序崩溃。
我如何禁止ActA第二次开始?
答案 0 :(得分:1)
如果您不想在活动之间交换数据,您可以这样做 创建一个这样的基本活动:
class BaseActivity extends Activity{
String data;
}
Now class ActA extends BaseActivity{
//you can put value to data directly
data="ABCD";
}
class ActB extends BaseActivity{
//Here you can access the data string directly
}
答案 1 :(得分:0)
您可以通过意图将检索到的数据从ActA传递到ActB,如此
Intent i = new Intent(getActivity(), ActB.class);
i.putExtra("String1", "foo");
i.putExtra("Integer1", "1337");
startActivity(i);
然后在你的ActB中你反复这样的数据:
Intent i = getIntent();
String foo = i.getStringExtra("String1");
Integer leet = i.getStringExtra("Integer1");
如果您想传递自定义对象,请转到How to send an object from one Android Activity to another using Intents?
答案 2 :(得分:0)
这种情况正在发生,因为ActB的onCreate()方法正在调用super(),它会一次又一次地调用ActA的onCreate()方法。因此,最好不要在ActB中扩展ActA。 您可以通过从ActA到ActB的传递意图传递这些值。
答案 3 :(得分:0)
首先,您需要了解您的OOP概念。
正如您所说 ActA 更像是SplashScreen
,所以我假设 ActB 是MainScreen
。您不应extend
ActA 来创建 ActB 。它们之间没有Is-A
的关系。
问题在于: ActB 扩展 ActA ,因为它需要 ActA 检索到的数据来执行它的任务。
您出于非常错误的原因延长了 ActA 。
接下来,我假设(因为您没有提供任何代码)您已经编写了代码,该代码在 ActA 的onCreate()
中开始 ActB 方法,这就是问题的原因
这会创建一个循环,因为 ActA 开始检索其他数据并再次调用 ActB 。所以我的应用程序崩溃了。
请注意,由于您的结构,首次启动 ActB 时,它是检索数据并调用自身的而不是的ActA 强>
请删除继承并使用Intent.putExtra(key, value)
方法here将数据从 ActA 传递到 ActB 。
e.g。检索some_data
Intent i = new Intent(ActA.this, ActB.class);
i.putExtra("some_key", some_data);
ActA.this.startActivity(i);
以及需要数据的 ActB
Intent i = getIntent();
并使用适当的API some_data
从i
检索Intent.get<TYPE>Extra()
,例如。 i.getIntExtra("some_key")
(docs)
它会起作用。
请参阅@Malik的回答。