Как контролировать поток действий - кнопка «Назад» и кнопка «Домой» - PullRequest
3 голосов
/ 02 сентября 2010

У меня есть 3 действия в моем приложении:

Activity1 -> Activity2 -> Activity3

Внутри Activity3, если пользователь нажимает Back, я хотел бы вернуться к Activity2.В событии on3 для Activity3 я добавил оператор finish().Возможно, в этом даже нет необходимости, но я хотел убедиться, что это действие очищено.Это работает нормально.

Однако в то время как в Activity3, если пользователь нажимает Home или запускает новое приложение (через панель уведомлений или каким-либо другим способом), я хочу, чтобы Activity3 и Activity2 завершались.Если пользователь возвращается к этому приложению, он должен продолжить с Activity1.

Я выяснил, как сделать то или другое, но я не могу понять, как обрабатывать оба случая, если это вообще возможно.Могу ли я перехватить кнопку «Назад» в Activity3 и отправить сообщение обратно в Activity2, сказав, что оно не finish()?Кажется, что Действия следуют одному и тому же потоку жизненного цикла (Пауза, Остановка) независимо от того, что вы делаете, чтобы отправить их в фоновый режим.

Просто чтобы ответить на вопрос, почему я хочу это поведение, представьте, что Activity1- экран входа в систему, Activity2 - экран выбора, а Activity3 - экран контента.Если я нажму «Назад» со страницы содержимого, я хочу сделать новый выбор.Если я выхожу любым другим способом (Домой, панель уведомлений), я хочу, чтобы пользователь был "logged out".

Заранее благодарен за вашу помощь.

Ответы [ 4 ]

10 голосов
/ 02 сентября 2010

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

В событиях onPause Activity2 и Activity3 я добавил finish (). Это учитывает случай, когда пользователь нажимает кнопку «Домой» или отвечает на событие панели уведомлений во время этих действий. Поскольку оба эти действия завершены, если пользователь вернется в приложение, он получит Activity1 (теперь на вершине стека.)

В Activity3 я добавил ловушку onKeyDown для клавиши «Назад». Поскольку Activity2 был убит, когда он перешел на паузу, мы должны запустить новый Activity2 из Activity3. После запуска Activity2, Activity3 затем заканчивается. Вот код для on3 Keyown Деятельности 3:

public boolean onKeyDown(int keyCode, KeyEvent event){
    if(keyCode == KeyEvent.KEYCODE_BACK) {
            Intent Act2Intent = new Intent(thisActivity, Activity2.class);              
            startActivity(Act2Intent);          
            finish();
            return true;
    }
    return false;
}
1 голос
/ 02 сентября 2010

Вы также можете присвоить Activity1 атрибут android:clearTaskOnLaunch в вашем AndroidManifest.xml.

0 голосов
/ 20 июня 2011

@ RMS2 ответ, который вы предложили ... это обеспечит обратную функциональность? Я также столкнулся с подобной проблемой, поэтому вместо переопределения onpause и возобновления я переопределил метод onUserLeaveHint (). Таким образом, мое приложение знает, когда пользователь нажимает кнопку «Домой» и завершает действие.

0 голосов
/ 07 июня 2011

К основной деятельности добавить:

андроид: launchMode = "singleTask" андроид: clearTaskOnLaunch = "истинный"

К другим добавить:

android:finishOnTaskLaunch="true"

Таким образом, он прекратит любую активность при возврате в приложение после нахождения в фоне.

...