应用程序看起来像这样:MainActivity -> UserActivity -> DetailsActivity。(活动的大致顺序)。
我想在 DetailsActivity(行中的第三个活动)中单击后退按钮时关闭应用程序。
想知道这样做是否是一种好习惯以及最好的方法是什么?
应用程序看起来像这样:MainActivity -> UserActivity -> DetailsActivity。(活动的大致顺序)。
我想在 DetailsActivity(行中的第三个活动)中单击后退按钮时关闭应用程序。
想知道这样做是否是一种好习惯以及最好的方法是什么?
如果我理解正确,即使堆栈不为空,您也想关闭活动,这意味着堆栈中有超过 1 个活动?
好吧,如果只有一个......只是:
finish();
否则诀窍是:
Intent intent = new Intent(Main.this, Main.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
在同一活动中onCreate
:
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
因此,您清除堆栈,然后杀死剩下的一个……您可以在任何活动中执行此操作,当然还可以在onBackPressed
:)中使用它
您可以通过覆盖后退按钮事件以在特定条件下不添加特定活动的历史记录来实现这一点。
@Override
public void onBackPressed()
{
if ( ! getIntent().getExtras().getBoolean(FROM_SETTINGS_KEY))
moveTaskToBack(true); // exist app
else
finish();
}
在我的示例中,它检查我启动活动的位置的标志,如果从设置启动则正常运行,否则将其置于顶部并在后按时退出应用程序
试试这个。
quitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View paramView)
{
finish();
moveTaskToBack(true);
}
});
试试这个,noHistory
在你的 mainifest 文件中添加每一个活动。
android:noHistory="true"
当您从 MainActivity 启动 UserActivity 时,将 finish() 放在 startActivity() 之后。启动 DetailsActivity 时在 UserActivity 中执行相同操作
在您当前的活动中:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK ) {
Intent intent = new Intent(CurrentActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}
MainActivity OnCreate 内部:
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
return;
}
这对我有用:
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
1) 在项目中创建一个名为 Constants.java 的文件
2)将此代码添加到该文件
public static void killAll() {
for (Activity act : Constants.activity_stack) {
act.finish();
}
Constants.activity_stack.clear();
}
3)现在,当您在 onCreate() 的主要活动中添加以下代码段
// add to stack
Constants.activity_stack.add(this);
4)类似的将用户活动添加到堆栈中
5) 在 onBackPressed() 的 Delivery Details 中使用下面的代码片段
Constants.killAll();//will kill all the activities and bring you out of the application.
这是一个完整的类,它显示了当第一个活动中的按钮被按下时如何调用另一个活动。
public class FirstActivity extends Activity implements View.OnClickListener {
Button goToSecondActivityButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
((TextView) findViewById(R.id.textRecommendationMessage)).setText("This is the first activity");
goToSecondActivityButton= (Button) findViewById(R.id.button_go_to_second_activity);
goToSecondActivityButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
goToSecondActivity();
}
private void goToSecondActivity() {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
finish();
}
}
如果您从 MainActivity 调用 UserActivity,则在 startActivity() 之后调用 finish()。下面是代码:
Intent userActivity = new Intent(MainActivity.this, UserActivity.class);
userActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
MainActivity.this.startActivity(userActivity );
finish();
关于你的活动
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return super.onOptionsItemSelected(item);
}
public void onBackPressed(){
Intent a = new Intent(Qeydiyyat.this,Login.class);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
public void onBackPressed() {
moveTaskToBack(true);
}
可能有更多的方法可以实现这一点,但这里有两种对我有用的方法。一种方法是将任务移回堆栈。
override fun onBackPressed() {
moveTaskToBack(true);
}
另一种方法是:
override fun onBackPressed() {
val activityToMove = Intent(Intent.ACTION_MAIN)
activityToMove.addCategory(Intent.CATEGORY_HOME) //Indicate the next activity
activityToMove.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(activityToMove)
}
在DetailedActivity中使用onBackPressed()方法
override fun onBackPressed(){ //trigger when user press back button
super.onBackPressed()
finishAffinity() //This will close all acitivities
}