Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓关闭应用程序返回按钮_Android - Fatal编程技术网

Android 安卓关闭应用程序返回按钮

Android 安卓关闭应用程序返回按钮,android,Android,该应用程序如下所示: MainActivity->UserActivity->DetailsActivity。(活动的大致顺序) 我想在DetailsActivity(行中的第三个活动)中单击back按钮时关闭应用程序 想知道这样做是否是一种好的做法,以及最好的方法是什么?试试这个,在每个活动的mainifest文件中添加noHistory android:noHistory="true" 如果我理解正确,即使堆栈不是空的,也要关闭活动,这意味着堆栈中有多个活动 如果只有一个。。。只是: fi

该应用程序如下所示: MainActivity->UserActivity->DetailsActivity。(活动的大致顺序)

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


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

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

android:noHistory="true"

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

如果只有一个。。。只是:

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

所以你清除了堆栈,然后杀死剩下的一个。。。您可以在任何活动中执行此操作,当然也可以在从main activity put finish()在startActivity()之后启动UserActivity时的
on backpressed
:)

中使用它。 启动DetailsActivity时在UserActivity中执行相同操作(活动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);
Constants.killAll();//will kill all the activities and bring you out of the application.
4) 类似地,将用户活动添加到堆栈中

5) 在onBackPressed()中的传递详细信息中,使用以下代码段

        // add to stack
    Constants.activity_stack.add(this);
Constants.killAll();//will kill all the activities and bring you out of the application.

您可以通过重写back按钮事件来实现这一点 在特定条件下不添加特定活动的历史记录

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

在我的示例中,它检查我启动活动的位置是否有标志,如果是从“设置”启动的,则正常操作,否则将其置于顶部,并在当前活动中按“返回”退出应用程序:

@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);
}
创建时的内部Main活动:

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();
    return;
}

下面是一个完整的类,它显示了当按下第一个活动中的按钮时如何调用另一个活动

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

 quitBtn.setOnClickListener(new View.OnClickListener() {         
    @Override
    public void onClick(View paramView) 
  {
        finish();          
        moveTaskToBack(true);
    }
});
这对我很有用:

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();
关于你的活动



如果我把它放在清单中,那么在活动中我只调用finish()?它什么都不做。我将我的活动的noHistory放在清单中,并按下了返回按钮finish,但我刚刚回到上一步activity@John不需要叫“完成”。把这个放在历史上就行了enough@MuraliGanesan什么是op在
UserActivity
中,并且想要导航到上一个活动?。点击这里的use action bar@John这里有一个示例项目,请下载并使用。您将获得解决方案单击应用程序图标使用操作栏导航到ap主屏幕单击后退按钮退出应用程序。后退按钮用于导航到上一个活动。请检查此链接,最好让android处理活动生命周期,如果您完成了某些活动,android知道如何处理itfinish()将仅结束当前活动!术士请阅读完整答案…:)这个解决方案有效。。。我知道finish()结束当前活动,但由于您清除了堆栈,因此您只有一个活动…您当前的一个活动…您不需要手动完成!因为android提供了一个直接调用,可以将您的活动移动到堆栈的最底层moveTaskToBack(true);术士,这里的问题是在背压下退出程序。。。如果重新读取堆栈,它仍然不是空的…因此,一旦使用“后退”按钮,堆栈顶部的活动将被调用…它仍然不会退出。。。您需要做的是清除堆栈。否则,您将返回到另一个位置activity@Jony-清除堆栈是否也会影响其他打开的应用程序?
moveTaskToBack(true)
实际上非常简洁,因为从技术上讲,它不会关闭应用程序,而是跳出应用程序。什么是设置键中的
?我定义的自定义常量nice。这就是我想要的行为。通过这种方式,用户可以在登录活动中按下后退键时关闭应用程序,而不会将其杀死。因此,如果用户重新访问该应用程序,他/她不需要重新启动该应用程序。我不明白
!getIntent().getExtras().getBoolean(从设置键)
你在检查什么?正是我需要的!完美的复制品!!!它的作用就像一个符咒,使我们不必在您想要关闭应用程序时清除堆栈,因为您不再打算使用的每个活动都可以在您导航到工作流中的下一个活动时立即关闭!:)正确但离题,因为OP询问如何适当地“关闭”应用程序