Как закрыть все дочерние действия от родителя в Android - PullRequest
0 голосов
/ 10 июня 2011

Я новичок в Android.Фактически один обработчик выполняется в домашнем задании A каждые 30 секунд для проверки сетевого соединения.

Если я перешел к заданию C по A-> B-> C, если в этом случае нет сетевого соединениявремя, затем я хочу закрыть действие B и C, а затем показать окно сообщения в действии A.

Но моя проблема в том, что мой обработчик работает каждые 30 секунд в домашнем задании A. Но если я был вЗадание C или какое-либо другое задание, как найти то, на что сейчас направлено мое приложение.Затем я хочу завершить эти дочерние действия и показать, что у Домашнего занятия AI есть 9 детских занятий в упражнении B.

Я слышал об использовании "FLAG_ACTIVITY_CLEAR_TOP".Я использовал следующий код в обработчике в самом домашнем задании А.Но получил ошибку.

        Intent intent = new Intent( ctx, Homepage.class );    
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | 
             Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    ctx.startActivity( intent );

Здесь Homepage.class - это моя Домашняя активность A, и я установил эту активность в файле манифеста как

    android:launchMode="singleTop"    

Пожалуйста, помогите!

Ответы [ 5 ]

5 голосов
/ 10 июня 2011

Вы можете начать упражнение А и закрыть все остальные занятия. Вы должны создать новое намерение и добавить флаг FLAG_ACTIVITY_CLEAR_TOP


Intent activityA = new Intent(context, ActivityA.class);
activityA.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.StartActivity(activityA);

это закроет все действия, которые находятся в стеке и находятся наверху действия A

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

Например, если вы хотите запустить intentB, вы можете выполнить следующее в старой активности:
<br> Intent intentB = new Intent();<br> intentB.setClass(XYZ.this, abc.class);<br> intentB.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);<br> startActivity(intentB);<br>

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

Вы можете использовать, по моему мнению, два способа:

Если вы запускаете действие с помощью startActivityForResult, тогда вы можете вызывать finish () в этом новом действии, когда закончите с ним, и он вернет управлениек деятельности, которая начала это.

ИЛИ иначе, может быть, я ошибаюсь,

Вызвать финиш внутри onStop 'метод переопределения'.

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

делает унифицированным resultCode для закрытия дочерних действий. Например. вы делаете 911 (должно быть int) как ваш resultCode. Если вы хотите, чтобы ваша активность завершилась и вернулась непосредственно к родительской активности, установите для resultCode значение 911:

setResult(911); finish();

В каждом дочернем действии вы переопределяете onActivityResult и проверяете, равен ли resultCode 911. Если да, то вызывайте setResult(911); finish();, пока не вернетесь к родительскому действию. Надеюсь, это поможет!

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

При вызове Acitivity C вызывайте финиш в действии B, при вызове Activity A из C вызывайте финиш () в действии C!

...