#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);