Androidclosures后退button上的应用程序

该应用程序看起来像这样:MainActivity – > UserActivity – > DetailsActivity。 (大概的活动顺序)。

我想在DetailsActivity中单击后退button(行中的第三个活动)时closures应用程序。

想知道这是否是一个好的做法,那么最好的办法是什么?

Related of "Androidclosures后退button上的应用程序"

如果我理解正确,即使堆栈不是空的,也要closures活动,意味着堆栈中有多个活动?

那么如果只有一个…只是:

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使用它:)

您可以通过覆盖后退button事件来完成该操作,以在特定条件下为特定活动添加任何历史logging。

 @Override public void onBackPressed() { if ( ! getIntent().getExtras().getBoolean(FROM_SETTINGS_KEY)) moveTaskToBack(true); // exist app else finish(); } 

在我的例子中,检查一个标志是从哪里我已经启动我的活动,如果从设置启动,然后正常行事,否则使其顶部和退出应用程序回来按下

试试这个,在你的mainifest文件中添加noHistory每一个活动。

 android:noHistory="true" 

在当前活动中:

 @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; } 

尝试这个。

  quitBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View paramView) { finish(); moveTaskToBack(true); } }); 

从MainActivity启动UserActivity时,在startActivity()之后放置finish()。 在启动DetailsActivity时,在UserActivity中执行相同的操作

这是一个完整的类,显示了当第一个活动中的一个button被按下时如何调用另一个活动。

 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(); } } 

1)在项目中创build一个名为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 void onBackPressed(){ Intent a = new Intent(Intent.ACTION_MAIN); a.addCategory(Intent.CATEGORY_HOME); a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(a); } 

如果从MainActivity调用UserActivity,则在startActivity()之后调用finish()。以下是代码:

 Intent userActivity = new Intent(MainActivity.this, UserActivity.class); userActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); MainActivity.this.startActivity(userActivity ); finish();