Android: несколько действий и вопрос OnDestroy

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

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

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

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

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

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

Кнопки "вернуться к основному" (в каждом действии) имеют готовый и 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 ответа

Решение

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

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

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

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

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

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

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

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

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

Finish не просто "завершает" ваше приложение / действие, как указано в Documents

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

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

Другие вопросы по тегам