Завершить родительскую и текущую деятельность в Android - PullRequest
46 голосов
/ 05 августа 2010

У меня есть 3 мероприятия. Действие A, которое приводит к действию B, которое, в свою очередь, может вернуться к действию A или начать действие C. Однако, если я снова нажму на действие C, приложение должно закрыться.

Подводя итог:

  • Задание A начинает задание B
  • Нажатие Назад на мероприятии B должно привести к A
  • Деятельность B начинает деятельность C
  • Нажатие Назад при активности C должно закрыть приложение

Как мне перейти от действия B к C? Этот код в настоящее время дает мне исключение NullPointerException в последней строке:

Intent intent=new Intent(ActivityB.this, ActivityC.class);
startActivity(intent);
ActivityB.this.finish();
ActivityB.this.getParent().finish();

Если я переключу последние две строки, я также получу нулевой указатель.

Ответы [ 15 ]

1 голос
/ 08 февраля 2013
Intent intent=new Intent(ActivityB.this, ActivityC.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

ваша активность C перейдет в корневую активность, и после нажатия завершит работу приложений.

1 голос
/ 06 августа 2011

Это работает отлично:

btn_back.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {

Player.this.finish();
    }
});
0 голосов
/ 05 июня 2015

Следующий код должен сделать это за вас. Почти во всех других подходах ваше приложение останется в последних приложениях. Javadoc можно найти по адресу https://developer.android.com/reference/android/app/ActivityManager.AppTask.html#finishAndRemoveTask()

            ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
            if(am != null) {
                List<ActivityManager.AppTask> tasks = am.getAppTasks();
                if (tasks != null) {
                    tasks.get(0).finishAndRemoveTask();
                }
            }
0 голосов
/ 05 апреля 2012

Вы можете просто переопределить поведение клавиши возврата :

Действие A запускает действие B
Нажатие кнопки Back на действии B должно привести к
Действие B запускает действие C
Нажатие кнопки Back на мероприятии C должно закрыть приложение

Обратите внимание, что я не вызываю super из onBackPressed.Это также позволяет вам переопределить механизм просмотра стека для Android, что, по моему мнению, является большим преимуществом, поскольку в настоящее время, похоже, не существует способа простого удаления одного самого старого элемента из стека просмотра.

public class B extends Activity
{
    ...
    @Override
    public void onBackPressed()
    {
        // Start activity A
        Intent aIntent = new Intent(this, A);
        startActivity(bIntent);
    }
    ...
}

public class C extends Activity
{
    ...
    @Override
    public void onBackPressed()
    {
        // Close
        finish();
    }
    ...
}

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

0 голосов
/ 05 августа 2010

Пусть каждое действие прослушивает результат следующего действия и завершает себя, если это происходит.

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

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