Android: несколько действий и вопрос OnDestroy - PullRequest
2 голосов
/ 01 октября 2010

У меня есть несколько десятков занятий: 1-основное, 1-анимация, 10-другое и его подмножества дополнительных действий (пара десятков).

Из основного вы можете перейти к любому из Другое с помощью кнопок.

Другие вызывают подмножество действий, и они вызывают действие Анимация.

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

Все кнопки позволяют пользователю корректировать активность.

Проблема : из основного занятия я хочу выйти с помощью клавиши «Назад» устройства. Но что происходит, так это то, что он шагает назад через все предыдущие действия.

Кнопки «вернуться к основному» (в каждом упражнении) содержат finish и onDestroy . Итак, я не уверен, почему эти экраны / действия не уничтожены ...?

Любые комментарии / предложения / разъяснения приветствуются - спасибо

[добавление фрагмента кода]

Примечание: я переместил / добавил / удалил финиш, onDestroy, onStop ... перепробовал много способов, поэтому то, что показано в фрагменте, является только одним способом, которым я пытался ...

    //  ---------------------------------------------------------
mainMenu.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // do something
        Intent Maincode = new Intent();
          Maincode.setClassName(
                              "com.bt.test",
                              "com.bt.test.Maincode");
        //  startActivity(Maincode); // go to maincode  
          finish();
          onStop();
        onDestroy();
        startActivity(Maincode); // go to maincode  
    }
}); // end -----------------------------------------------

Ответы [ 3 ]

3 голосов
/ 01 октября 2010

Не могли бы вы опубликовать свой обработчик onClick для возврата к главной кнопке?

Вы должны делать что-то вроде этого:

Intent i = new Intent(this, MainActivity.class);
startActivity(i);
finish();

Edit: Вы также можете попробовать установить этот флаг:

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Это должно очистить стек активности между вызывающим и принимающим действиями, если принимающее действие уже где-то находится в стеке.

1 голос
/ 01 октября 2010

Во-первых, вы вообще никогда не должны вызывать onStop или onDestroy (или, в этом отношении, любой из других методов жизненного цикла Activity) самостоятельно. Android сделает это за вас в результате finish и, вероятно, запутается, если вы сделаете это сами.

Во-вторых, ваш слушатель "return to main" не должен вообще вызывать startActivity. Вместо этого, если вы хотите очистить стек активности, просто позвоните туда finish. Если вы можете находиться в нескольких действиях от основного и хотите вернуться напрямую, вы должны использовать startActivityForResult при запуске подопераций и установить результат Intent с истинным флагом, прикрепленным к «главной кнопке». Затем любой промежуточной активности будет вызван onActivityResult, и если они увидят флаг, они могут немедленно finish также, чтобы контроль вернулся к вашей основной деятельности.

РЕДАКТИРОВАТЬ: на самом деле, startActivity с FLAG_ACTIVITY_CLEAR_TOP гораздо более простой способ получить тот же эффект. Придерживайтесь этого.

0 голосов
/ 18 июля 2012

Готово - это не просто "завершение" вашего приложения / действия, так как в документе указано

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

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

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