应用程序看起来像这样: MainActivity - > UserActivity - > DetailsActivity。 (大致的活动顺序)。
我想在DetailsActivity中点击后退按钮时关闭应用程序(行中的第三个活动)。
想知道这样做是否是一种好习惯,最好的方法是什么?
答案 0 :(得分:33)
如果我理解正确,即使堆栈不为空,您也希望关闭活动,这意味着堆栈中有多个活动?
好吧,如果只有一个......只是:
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
中使用它:)
答案 1 :(得分:19)
您可以通过覆盖后退按钮事件来完成此操作 在特定条件下不添加特定活动的历史记录。
@Override
public void onBackPressed()
{
if ( ! getIntent().getExtras().getBoolean(FROM_SETTINGS_KEY))
moveTaskToBack(true); // exist app
else
finish();
}
在我的示例中,它检查了一个标志,该标志来自我启动我的活动,如果从设置启动然后正常行动,否则将其置于顶部并退回应用程序
答案 2 :(得分:6)
尝试此操作,在清单文件中为每个活动添加noHistory
。
android:noHistory="true"
答案 3 :(得分:6)
试试这个。
quitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View paramView)
{
finish();
moveTaskToBack(true);
}
});
答案 4 :(得分:4)
从MainActivity启动UserActivity时,在startActivity()之后输入finish()。 在启动DetailsActivity
时,在UserActivity中执行相同的操作答案 5 :(得分:4)
在您当前的活动中:
@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;
}
答案 6 :(得分:1)
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()的交付详细信息中使用以下代码段
Constants.killAll();//will kill all the activities and bring you out of the application.
答案 7 :(得分:1)
这是一个完整的类,显示了在按下第一个活动中的按钮时如何调用另一个活动。
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();
}
}
答案 8 :(得分:1)
这对我有用:
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
答案 9 :(得分:1)
如果从MainActivity调用UserActivity,则在startActivity()之后调用finish()。下面是代码:
Intent userActivity = new Intent(MainActivity.this, UserActivity.class);
userActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
MainActivity.this.startActivity(userActivity );
finish();
答案 10 :(得分:0)
关于您的活动
@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);
答案 11 :(得分:0)
public void onBackPressed() {
moveTaskToBack(true);
}