情况可能就像说,我有5个活动。说主要活动,活动1,活动2,活动3和活动4.
可以使用活动1,2,3& 4直接在按钮的帮助下插入主活动布局。
情况:用户进入主活动,然后按一个按钮进入活动2.然后他按下并返回主活动。从那里他现在在另一个按钮的帮助下进入活动3,同样当他按下后退按钮时,他进入主活动。
主要活动 - >活动2 - >主要活动 - >活动3 - >主要活动。
问题:现在用户从“活动3”进入“主要活动”。用户在主活动布局上。现在,如果用户按下手机上的后退按钮,则需要执行以下过程才能退出应用程序:
主要活动 - >活动3 - >主要活动 - >活动2 - >主要活动 - > EXIT
需要完成:我想从主活动本身退出应用程序,如果用户按下手机上的后退按钮,然后按照上述路径退出应用程序,我希望用户应该能够通过显示一个简单的AlertDialog框将其从主活动本身退出。
怎么可能这样做,因为我无法找到解决这个问题的方法?
答案 0 :(得分:2)
您需要覆盖onBackPressed()
内的 MainActivity()
并使用 finishAffinity
完成所有活动
当活动检测到用户按下后退键时调用。
finishAffinity()
:
的 added in API level 16
强>
完成此活动以及当前任务中具有相同亲缘关系的紧接其下的所有活动。
示例代码
@Override
public void onBackPressed() {
super.onBackPressed();
ActivityCompat.finishAffinity(MainActivity.this);
}
我希望用户能够通过显示一个简单的AlertDialog框从主活动本身退出。
@Override
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
.setTitle("Alert")
.setCancelable(false)
.setMessage("Are your sure want to exit?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.finishAffinity(MainActivity.this);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
答案 1 :(得分:0)
添加您的MainActivity
@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
答案 2 :(得分:0)
编写双重按钮退出主要活动是一个很好的代码练习。
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
答案 3 :(得分:0)
这是退出应用的常用方法,同时我建议在清单中使用除MainActivity以外的活动中的“nohistory”属性。
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
和其他活动在清单
中使用nohistory方法 <activity
android:name="com.omniapay.salesservice.Activities.LoginActivity"
android:label="LOGIN"
android:noHistory="true" />