Java 防止再次启动启动程序活动如果启动程序活动已经启动,只需重新启动即可

Java 防止再次启动启动程序活动如果启动程序活动已经启动,只需重新启动即可,java,android,android-intent,Java,Android,Android Intent,我正在从事android活动。我有一个主要活动和两个其他活动,这两个活动是从主要活动开始的。当启动这两个活动中的任何一个时,都会有后退按钮,按下后退按钮时,我希望能够启动恢复的主活动,而不是在其他页面上重新启动它。 以下是主要活动的代码 package com.example.nadeemahmad.smartcalculator; 导入android.app.Activity; 导入android.app.IntentService; 导入android.content.Intent; 导入

我正在从事android活动。我有一个主要活动和两个其他活动,这两个活动是从主要活动开始的。当启动这两个活动中的任何一个时,都会有后退按钮,按下后退按钮时,我希望能够启动恢复的主活动,而不是在其他页面上重新启动它。 以下是主要活动的代码

package com.example.nadeemahmad.smartcalculator;
导入android.app.Activity;
导入android.app.IntentService;
导入android.content.Intent;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.Switch;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类MainActivity扩展了活动{
按钮显示\u cam\u ctrl,
显示\u voice\u ctrl;
文本视图ma_res_txt;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//控制按钮
show\u cam\u ctrl=(按钮)findviewbyd(R.id.show\u cam\u ctrl);
show\u voice\u ctrl=(按钮)findviewbyd(R.id.show\u voice\u ctrl);
show\u cam\u ctrl.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向i=新意向(MainActivity.this,cam\u calculator.class);
星触觉(i);
}
});
show\u voice\u ctrl.setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图){
意图i=新意图(MainActivity.this,voice\u calculator.class);
星触觉(i);
}
});

}
据我所知,您正在从父活动启动两个子活动,当您按back键时,父活动正在重新启动。这是因为Android调用堆栈不知道父活动是两个子活动的父活动。在Android清单中,为两个子活动指定parentActivity像这样的ild活动-

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

如果仍然不起作用,请告诉我。祝您编码愉快!

据我所知,您正在从父活动启动两个子活动,当您按back时,父活动正在重新启动。这是因为Android调用堆栈不知道父活动是两个子活动的父活动。在您的Andr中oid清单,为两个子活动指定parentActivity,如下所示-

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

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

只需从OnClickListener调用
cam\u calculator.this.finish()
voice\u calculator.this.finish()
。这些活动将完成并“自动”返回到主活动

编辑:

如果您放置这样的代码:
startActivity(newintent(this,SomeActivity.class));
您将直接告诉框架启动一个活动。
只需从OnClickListener中删除它!

只需调用
cam\u calculator.this.finish()
voice\u calculator.this.finish()
。这些活动将完成并“自动”返回到主活动

编辑:

如果您放置这样的代码:
startActivity(newintent(this,SomeActivity.class));
您将直接告诉框架启动一个活动。
只需删除它!

请使用下面编辑的代码

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将在堆栈中,因此当您在第二个activity中执行finish()时,将弹出MainActivity并调用onResume(),而不是onCreate()

请使用下面编辑的代码

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将在堆栈中,因此当您在第二个活动中完成()时,将弹出MainActivity,并调用onResume(),而不是onCreate()

让我分享一些添加了的图片。请检查!让我分享一些添加了的图片。请检查!如果你看第二个代码,我已经完成了。对不起,我错过了那部分。所以只需删除“new Intent();startActivity()”部分。Android就是这样工作的。当你开始一个新活动时,它只会显示“顶部”上一个代码,就像一副叠起来的牌(这就是为什么它被称为“backback”)。因此,如果你移除顶部的一个,你会看到下面的一个。如果你看第二个代码,我已经完成了。抱歉,我错过了那部分。所以只需移除“new Intent();startActivity()”部分。这就是安卓的工作原理。当你开始一个新的活动时,它只是在前一个活动的“顶部”,就像一副叠好的卡片(这就是为什么它被称为“backback”)。因此,如果你移除顶部的一个,你会看到它下面的一个。