所以我为活动设置了一个后退按钮。它会返回菜单屏幕。我想要恢复按下后退按钮的原始活动。但是我所拥有的代码,当按下菜单项而不是返回已经创建的实例时,它会打开一个新的代码。当按下电话的实际后退按钮(调用OnDestroy的按钮)时,它会关闭所有相同活动的多个实例。我甚至可以看到,在关闭它们时,原始创建的已保存变量仍然存在。让我告诉你代码。
public boolean onOptionsItemSelected(MenuItem item){
Intent myIntent = new Intent(getApplicationContext(), Tools.class);
startActivityForResult(myIntent, 0);
return true;
这是原始活动中操作栏后退按钮的代码。它返回到工具类,这是一个带有按钮的活动,将您链接到我正在创建的EMS应用程序的工具。我们的想法是在原始活动中记录时间,回击,然后转到“呼叫信息”,其中您的时间将被声明并从全局变量中保存。好的,那么如果我想回到Tools,然后再次点击我的生命记录器,应该返回到我左边的页面怎么办?不。
vitals = (Button) findViewById(R.id.vitals);
vitals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try{
Class goVitals = Class.forName("com.vexos.emspal.Vitals");
Intent goIntent = new Intent(Tools.this, goVitals);
startActivity(goIntent);
}catch(ClassNotFoundException e){
e.printStackTrace();
}
finish();
}
现在我用这个按钮调用完成,以便销毁工具屏幕,因为它只是按钮,可以省去,并且可以打开一个新的实例。我知道在某处,我应该有类似if语句的东西,让我回到之前创建的" com.vexos.emspal.Vitals"的实例。但是再次点击它会创建一个新实例,而另一个实例挂在后台等待我再次访问。我应该怎么做这个onClick方法检查是否已经有一个正在运行的实例,然后onResume呢?
答案 0 :(得分:0)
所以我理解,你有:
活动A开始活动B
活动B开始活动A
活动B完成自己。
如果这是正确的,你现在有两个A类活动,一个已经开始的活动和一个你从活动B开始的活动。
要解决此问题,请不要从活动B启动活动A,而只是完成活动B. 所以它应该是:
vitals = (Button) findViewById(R.id.vitals);
vitals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
答案 1 :(得分:0)
基于您在这里给出的评论答案是可能的解决方案之一。您希望第二个活动在再次单击按钮后保持相同的状态。因此,您需要保存其数据并将其恢复。
将您需要的所有数据保存在onSaveInstanceState中的savedInstanceState包中,该活动在活动停止时调用。然后在onRestoreInstanceState或onCreate上获取数据。
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
然后恢复数据:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call the superclass first
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
} else {
// Probably initialize members with default values for a new instance
}
...
}
请到此处了解更多详情:http://developer.android.com/training/basics/activity-lifecycle/recreating.html