防止再次启动启动器活动(如果它已经启动),只需恢复它

时间:2017-08-02 18:06:55

标签: java android android-intent

我正在开发Android活动。我有一个主要活动和另外两个活动,这两个活动是从主要活动启动的。每个都有后退按钮当启动这两个活动中的任何一个时,按下后退按钮我想要开始恢复主活动的意图,而不是在其他页面上重新启动它。 以下是主要活动的代码



package com.example.nadeemahmad.smartcalculator;

import android.app.Activity;
import android.app.IntentService;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MainActivity extends Activity {

    Button  show_cam_ctrl,
            show_voice_ctrl;

    TextView ma_res_txt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Control Buttons
        show_cam_ctrl = (Button) findViewById(R.id.show_cam_ctrl);
        show_voice_ctrl = (Button) findViewById(R.id.show_voice_ctrl);

        show_cam_ctrl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this,cam_calculator.class);
                startActivity(i);
            }
        });
        show_voice_ctrl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this,voice_calculator.class);
                startActivity(i);
            }
        });


    }




这两项活动的代码



public class voice_calculator extends Activity {

    Button back_frm_voice;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_voice_calculator);

        back_frm_voice = (Button) findViewById(R.id.back_frm_voice);

        back_frm_voice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(voice_calculator.this,MainActivity.class);
                startActivity(i);
                finish();
            }
        });
    }
}
public class cam_calculator extends Activity {

Fragment cam_fragment;
Button back_frm_came;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cam_calculator);

    back_frm_came = (Button) findViewById(R.id.back_frm_came);

    back_frm_came.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(cam_calculator.this,MainActivity.class);
            startActivity(i);
            finish();
        }
    });

}
}



 这是主要的活动,在顶部BTN1和BTN2上有两个按钮 enter image description here 第二项活动是在BTN1印刷机上启动的,但是当我按下顶部的后退按钮enter image description here 此主要活动已启动,但未恢复,当我按下手机上的后退按钮然后它关闭并显示屏幕上的计算主要活动,我想要的是,当我按下后退按钮,所以意图应该带我去恢复计算的主要活动。 enter image description here

3 个答案:

答案 0 :(得分:1)

只需从OnClickListener中调用cam_calculator.this.finish()voice_calculator.this.finish()即可。这些活动将完成并“自动”返回MainActivity。

修改

如果您输入这样的代码:startActivity(new Intent(this, SomeActivity.class));,您将直接告诉框架启动活动。 只需删除它!

答案 1 :(得分:1)

请使用以下编辑的代码

public class voice_calculator extends Activity {

Button back_frm_voice;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_voice_calculator);

    back_frm_voice = (Button) findViewById(R.id.back_frm_voice);

    back_frm_voice.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //Intent i = new Intent(voice_calculator.this,MainActivity.class);
            //startActivity(i);
            finish();
        }
    });
}
}
public class cam_calculator extends Activity {

Fragment cam_fragment;
Button back_frm_came;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cam_calculator);

back_frm_came = (Button) findViewById(R.id.back_frm_came);

back_frm_came.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        //Intent i = new Intent(cam_calculator.this,MainActivity.class);
        //startActivity(i);
        finish();
    }
});

}
}

MainActivity将在堆栈中,因此当您在第二个活动中执行finish()时,将弹出MainActivity并调用onResume()而不是onCreate()

答案 2 :(得分:0)

根据我的理解,您将从父活动启动两个子活动,当您按回时,父活动正在重新启动。这是因为Android调用堆栈不知道父活动是两个子活动的父活动。在Android Manifest中,为两个子活动指定parentActivity,如下所示 -

android:parentActivityName="com.example.android.ParentActivity"

如果它仍然不起作用,请告诉我。快乐的编码!