Как закрыть все дочерние действия от родительского в Android

#android-layout #android

#android-layout #Android

Вопрос:

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

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

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

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

         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"    
  

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

Комментарии:

1. Почему вы опубликовали один и тот же вопрос 3 раза в течение 3 часов? Если у вас возникли проблемы с ответами на ваши вопросы, просто добавьте вопрос в комментарии

Ответ №1:

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

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

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

Комментарии:

1. он просит прекратить дочерние действия

Ответ №2:

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

Комментарии:

1. Извините, согласно моей задаче, я не могу этого сделать, если я нажму кнопку «Назад», она должна перейти к B и должна перейти к A. Если я выполняю действие C и в это время сетевое соединение отключено, то я хочу отобразить сообщение с действием A в фоновом режиме.

Ответ №3:

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

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

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

Вызовите finish внутри onStop ‘переопределить метод’.

Комментарии:

1. Нет, на самом деле обработчик on запускается в Activity A каждые 30 секунд, чтобы проверить сетевое соединение. Если я нахожусь в действии C, если нет сетевого подключения, то я хочу закрыть действия B и C, затем хочу показать окно сообщения в действии A. Но моя проблема в том, что мой обработчик не может определить, какое действие сосредоточено сейчас.

Ответ №4:

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

setResult(911); finish();

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

Ответ №5:

Например, если вы хотите запустить intentB, вы можете выполнить следующее в старой активности:

Intent intentB = new Intent();
intentB.setClass(XYZ.this, abc.class);
intentB.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intentB);