Закройте приложение, а не возвращайтесь к предыдущему действию - PullRequest
1 голос
/ 22 марта 2012

У меня есть следующая проблема: я открыл действие A, из которого я открыл действие B. Затем я хочу открыть действие C из B, чтобы при нажатии кнопки «Назад» в действии C приложение былозакрыто вместо возврата к предыдущему (B) действию.Я попытался использовать идеи отсюда (http://stackoverflow.com/questions/5794506/android-clear-the-back-stack),, но они не работают. Я знаю, как обрабатывать намерения, меня интересует только проблема обратной навигации.

Ответы [ 5 ]

6 голосов
/ 22 марта 2012

Начните свои действия, как это ..

это в деятельности A

  int k=1;
            Intent i=new Intent(A.this,B.class);
            startActivityForResult(i,k);

это в деятельности B

  int j=1;
            Intent i=new Intent(B.this,C.class);
            startActivityForResult(i,j);

в действии C переопределить кнопку возврата

  @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
    setResult(RESULT_OK, null);
    finish();
}
 return super.onKeyDown(keyCode, event);
}

и поместить ее в упражнение B

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       if (requestCode ==1) {
          if (resultCode == RESULT_OK) {

            setResult(RESULT_OK, null);
         finish();

          }
       }

поместите это в упражнение A

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       if (requestCode ==1) {
          if (resultCode == RESULT_OK) {
         finish();

          }
       }
    }
2 голосов
/ 22 марта 2012

Поместите finish() в onStop() обоих действий A и B. Это закроет оба действия, поэтому, когда вы нажимаете кнопку возврата из действия C, приложение закрывается. Это решит вашу проблему

  public void onStop(){
    super.onStop();
    finish();
    }
1 голос
/ 22 марта 2012

Я настоятельно рекомендую не вызывать System.exit (0);

Что вы можете сделать, это следующее. Деятельность A вызывает метод finish () сразу после StartActivity (B). Аналогично, B вызывает метод finish () сразу после startActivity (C). Таким образом, C является единственным активным действием, и нажатие назад останавливает приложение. Вернее, удаляет его из стека.

Вы не должны вызывать finish () в onStop (). Вызовите finish () при запуске новой операции или по завершении обработки в операции.

Кстати, finish () не сразу заканчивает вашу деятельность. Finish помещается в стек и выполняется сразу после завершения текущего метода. Аналогично, startActivity выполняется не сразу, а после завершения текущего метода.

0 голосов
/ 22 марта 2012

Вы можете использовать приведенный ниже код для перехода на домашний экран устройства.

            Intent startMain = new Intent(Intent.ACTION_MAIN);  
            startMain.addCategory(Intent.CATEGORY_HOME);
            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(startMain);
0 голосов
/ 22 марта 2012

В BackPress вы можете использовать

System.exit(0);

для завершения приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...