【发布时间】:2012-12-14 03:49:05
【问题描述】:
Activity A 有一个按钮,在其onclick 中启动新的Activity B,新的Activity 只有最小的onCreate 函数。
在活动 A 中,我按下一个使用
的按钮startActivity(new Intent(A.this, B.class))
启动活动 B。当我运行程序时,按下活动 A 中的按钮,活动 B 开始,但我必须使用两次后退按钮退出并返回第一个活动。
单击 A 中的按钮时,我检查了 logcat,同时创建了两个相同的实例。我还尝试在 Activity B 的 onCreate 中使用 Toast 进行调试,这表明当我使用后退按钮时,它会在另一个双胞胎 B Activity 中调用 onCreate。我发现这个帖子Clicking the back button twice to exit an activity 没有回答这个问题。
我可以阻止它创建双实例的唯一方法是使用 tag:launchMode= "singleInstance" 将其明确限制为清单中的活动。
问题仍然存在:
- 为什么要创建两个实例?
- 如何阻止它或如何正确使用它,以免发生这种情况?
更多解释: 代码: Activity A 有一个 buttOnClick() 函数,其中有一个 switch(view.getId()) 检查哪个按钮被点击。每个案例都使用特定的整数参数(按钮 id)调用函数动画。在此函数中,switch 再次检查 id 并使用 setAnimationListener 运行与按钮对应的动画。在动画结束时,它要求启动一个新活动。这是它的样子:
public void myButtonOnClick(View view)
{
switch (view.getId()) {
case R.id.button1:
animation(1);
break;
//....more lines..... }}
public void animation(int a){
//...code...
switch(a){
case 1:
anim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
public void onAnimationEnd(Animation arg0) {
Intent in =new Intent(A.this, B.class);
startActivity(in.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ));
animClear();
}
});
break;
//......... other cases......}
【问题讨论】:
-
请发布更多您的代码。问题很可能是
startActivity()以某种方式被调用了两次,或者 Activity B 正在启动它自己的另一个实例。 -
我不明白为什么活动 A 会创建两个实例。你能告诉我@Devunwired 活动 B 如何创建两个自身实例吗? (它不会启动任何活动)
标签: android back-button