Android关闭按钮上的应用程序

时间:2013-10-01 06:35:28

标签: android

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

我想在DetailsActivity中点击后退按钮时关闭应用程序(行中的第三个活动)。

想知道这样做是否是一种好习惯,最好的方法是什么?

12 个答案:

答案 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);

}