2013-11-26 355 views
0

我有MenuActivity与“新游戏”和“简历”按钮。 “新游戏”启动FireRoomActivity。从其他活动恢复活动

public void newGame(View view){ 
     Intent intent = new Intent(this, FireRoomActivity.class); 
     this.finish(); 
     startActivity(intent); 
    } 

在FireRoomActivity中,onBackPressed被覆盖以返回到MenuActivity。

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent inMain=new Intent(this, MenuActivity.class); 
    startActivity(inMain); 
} 

MenuActivity中的“恢复”按钮应该恢复FireRoomActivity.But这只是退出应用程序。 Q1)

public void resume(View view){ 
    this.finish(); 
} 

Q1)我做错了什么? Q2)如果我添加第三个活动“ThreeActivity”,并从FireRoomActivity(完成FireRoomActivity)开始它,并在此“ThreeActivity”覆盖onBackPressed去MenuActivity,我该如何去解决它?

我是新来的android的生命周期,所以我将不胜感激详细的答复

+0

活动将遵循自己的生命周期,所以你不能调用的onResume直接。当来自其他活动,然后跟其他方法时,它会先调用RESTART – Sameer

回答

1
**Try This** 
====================== 
public void onBackPressed() { 
Intent i = new Intent(getApplicationContext(), MenuActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      startActivity(i); 
      finish(); 
} 
0

尝试:

@Override 
public void onBackPressed() { 
    Intent inMain=new Intent(this, MenuActivity.class); 
    startActivity(inMain); 
} 

onBackPressed()本身完成的活动。在这种情况下,如果您在FireRoomActivity中按“返回”按钮,它将始终暂停。所以如果你想完成它,比你需要调用finish();

0

在onBackPressed重写的方法中删除super.OnBackPressed()

如果它不工作,试试这个:

上恢复按钮

Intent i = new Intent(getActivity(), FireRoomActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) 
startActivity(i); 
1

1)您与自然秩序搞乱的点击与语法启动FireRoomActivity。在“新游戏”方法中不需要调用“完成”。

只需将活动保留在堆栈上,以便您可以在按下后退键时返回到活动状态。当按下后退键时,您不需要启动新的活动,因为您已返回到已有的一个MenuActivity。

您的简历方法正在调用完成并因此关闭菜单。而不是“完成”菜单,放入代码来恢复游戏。

2)了解活动生命周期。一旦你理解了这一点,你会更好地处理这个问题。如果您打算再次开始另一项活动,则无需完成活动。把它们想象成一堆。您将活动放在堆栈上,后退按钮将其弹回。您只有在完成完成后才能完成一项活动,并且永远不想再看到它。

+0

我有点困惑。如果我没有在MenuActivity中调用完成,FireRoomActivity将在堆栈的前端如此: **** FireRoomActivity,MenuActivity **** 然后,当用户在FireRoomActivity中并按下后退按钮时,FireRoomActivity需要完成才能使MenuActivity进入堆栈。然后,当点击恢复按钮时,我需要恢复FireRoomActivity,我该怎么做? – Nazerke

+0

您无法恢复已完成的活动。启动一个新的FireRoomActivity,但包含其他功能,指示它从保存的状态恢复。保持你的堆栈简单。如果您按照您尝试的方式操作,您会遇到各种问题。最重要的是,了解活动生命周期。如果你了解它,你就不会有这些问题。 – Kuffs

+1

如果您不想将您的活动视为永久游戏屏幕,这可能会有所帮助。它们是用户通过其进行交互的游戏窗口。您应该可以根据请求保存所有游戏状态(例如用户暂停时),重启设备,但仍然会以与用户离开游戏相同的状态重新开始游戏活动。 – Kuffs

0

覆盖此方法在您的ThreeActivity

@Override 
public void onBackPressed() { 
    Intent intent=new Intent(this, MenuActivity.class); 
    startActivity(intent); 
} 

欲了解更多信息请参考有关链接this