返回已创建的活动或恢复

时间:2014-11-17 16:51:07

标签: android onclick back

所以我为活动设置了一个后退按钮。它会返回菜单屏幕。我想要恢复按下后退按钮的原始活动。但是我所拥有的代码,当按下菜单项而不是返回已经创建的实例时,它会打开一个新的代码。当按下电话的实际后退按钮(调用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呢?

2 个答案:

答案 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