我有3个活动:A-> B-> C
用户从活动A开始。转到B时,他可以按返回并返回到A。 但是...当用户从B转到C时,我希望A和B将被删除,并且单击返回时用户将退出应用程序。
我尝试过:
Intent intent = new Intent(B.this, C.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
但在背面仍然指向B。如果这样做:
Intent intent = new Intent(VerifyPhoneActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
用户返回A,所以。这不是我所需要的。
答案 0 :(得分:2)
在onBackPressed()
C中覆盖Activity
@Override
public void onBackPressed() {
finishAffinity();
}
这将导致在同一任务中运行的所有Activity
完成。如果用户在最近的任务窗口中通过点击再次启动应用程序,则会显示Activity
A。
答案 1 :(得分:1)
从B
开始startActivityForResult()
活动:
Intent intent = new Intent(A.this, B.class);
startActivityForResult(intent, 100);
并在类A
startActivityForResult()
中进行覆盖:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 100) {
if (resultCode == 1) {
finish();
}
}
}
现在在B
类中,将结果设置为发送回活动A
:
Intent intent = new Intent(VerifyPhoneActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
setResult(1);
finish();
答案 2 :(得分:1)
100%工作。 尝试像这样启动活动C。 Intent intent = new Intent(this,ActivityC.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity();
答案 3 :(得分:0)
如果我理解的正确,则可以使用SharedPreferences实现此目的:
在您的活动A中添加以下内容:
public class ActivityA extends AppCompatActivity {
SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
if (savedInstanceState == null){
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putBoolean("CloseApp", false);
editor.commit();
}
}
@Override
protected void onResume() {
super.onResume();
boolean finish = prefs.getBoolean("CloseApp", false);
if (finish){
this.finish();
}
}
在活动B中:
public class ActivityB extends AppCompatActivity {
SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
}
@Override
protected void onResume() {
super.onResume();
boolean finish = prefs.getBoolean("CloseApp", false);
if (finish){
this.finish();
}
}
活动C:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putBoolean("CloseApp", true);
editor.commit();
}
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
应该可以。
答案 4 :(得分:0)
如果您的应用程序从JELLY_BEAN开始运行,则只需在Activity C中编写即可。
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onBackPressed() {
super.onBackPressed();
finishAffinity();
}
如果您的应用在JELLY_BEAN下工作,则可以使用以下解决方案:
活动C:
@Override
public void onBackPressed() {
Intent i = new Intent(C.this,A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("BackFromC",true);
startActivity(i);
super.onBackPressed();
}
onCreate中的活动A:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
if(getIntent() != null){
if(getIntent().getBooleanExtra("BackFromC",false)){
finish();
}
}
... your Code
}