Как перезапустить Android Activity
? Я попробовал следующее, но Activity
просто выходит.
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
android
android-activity
Самет ОЗТОПРАК
источник
источник
Ответы:
Я сделал мой переключатель темы следующим образом:
По сути, я звоню
finish()
первым и использую то же самое намерение, с которого началась эта деятельность. Это, кажется, делает трюк?ОБНОВЛЕНИЕ: Как отметил Ральф ниже,
Activity.recreate()
это путь в API 11 и выше. Это предпочтительно, если вы находитесь в среде API11 +. Вы все еще можете проверить текущую версию и вызвать фрагмент кода выше, если вы используете API 10 или ниже. (Пожалуйста, не забудьте подтвердить ответ Ральфа!)источник
Начиная с уровня API 11 (Honeycomb), вы можете вызывать метод воссоздания () действия (благодаря этому ответу).
Метод refreshate () действует так же, как изменение конфигурации, поэтому ваши методы onSaveInstanceState () и onRestoreInstanceState () также вызываются, если это применимо.
источник
До SDK 11 способ сделать это выглядит так:
источник
overridePendingTransition(0, 0);
послеfinish()
иstartActivity()
, соответственно, а не там, где вы это называли ...Просто чтобы объединить ответы Ральфа и Бена (включая изменения, сделанные в комментариях):
источник
Я использовал этот код, так что я все еще мог поддерживать более старые версии Android и использовать
recreate()
на более новых версиях Android.Код:
Образец:
источник
Это решение сработало для меня.
Сначала завершите упражнение, а затем начните его снова.
Образец кода:
источник
На сегодняшний день это самый простой способ перезапустить текущую активность:
источник
Вызовите этот метод
Спасибо,
источник
Хотя на это уже отвечали несколько раз.
Если перезапустить активность из фрагмента, я бы сделал это так:
Значит, вы думаете, это немного перебор? Но
Handler
публикация позволяет вызвать это в методе жизненного цикла. Я использовал это вonRestart
/onResume
методов при проверке, изменилось ли состояние между пользователем, возвращающимся в приложение. (установлено что-то).Без этого,
Handler
если вы вызовете его в нечетном месте, оно просто убьет действие и не перезапустит его.Не стесняйтесь задавать любые вопросы.
Ура, Крис
источник
Ну, это не в списке, но комбо некоторых, которые уже размещены:
источник
В сочетании со странным поведением SurfaceView в течение жизненного цикла с камерой . Я обнаружил, что метод create () плохо работает с жизненным циклом SurfaceView. SurfaceDestroyed никогда не вызывается во время цикла отдыха. Он вызывается после onResume (странно), после чего мой SurfaceView уничтожается.
Оригинальный способ воссоздания деятельности работает отлично.
Я не могу точно понять, почему это так, но это всего лишь наблюдение, которое, мы надеемся, поможет другим в будущем, потому что оно устранило мои проблемы, которые у меня были с SurfaceViews.
источник
Интересно, почему никто не упомянул,
Intent.makeRestartActivityTask()
что делает именно эту цель.Этот метод устанавливает
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
флаги по умолчанию.источник
На самом деле следующий код действителен для уровней API 5 и выше, поэтому, если ваш целевой API ниже, чем этот, вы получите нечто очень похожее на код EboMike.
источник
Есть один хакерский способ, который должен работать на любую деятельность, включая основную.
Когда ориентация меняется, Android обычно воссоздает вашу активность (если вы не переопределите ее). Этот метод полезен для поворота на 180 градусов, когда Android не воссоздает вашу активность.
источник
попробуйте использовать это ..
источник
Решение для вашего вопроса:
Вам нужно привести к контексту действия, чтобы начать новое действие, а также завершить текущее действие.
Надеюсь, что это полезно .. и работает для меня.
источник
Если вы удалите последнюю строку, вы создадите новую
act
активность, но ваш старый экземпляр все еще будет жив.Вам нужно перезапустить действие, как при изменении ориентации (т.е. ваше состояние сохраняется и передается
onCreate(Bundle)
)?Если вы этого не сделаете, одним из возможных способов решения этой проблемы будет использование одного дополнительного фиктивного действия, которое будет запущено с первого действия, и заданием которого является запуск нового экземпляра. Или просто отложите звонок на
act.finish()
, после запуска нового.Если вам нужно спасти большую часть состояния, вы попадаете в довольно глубокие воды, потому что нетривиально передать все свойства вашего состояния, особенно без утечки старого контекста / действия, передав его новому экземпляру.
Пожалуйста, укажите, что вы пытаетесь сделать.
источник
Это способ, которым я делаю это.
источник
Если вы звоните из какого-то фрагмента, сделайте так, как показано ниже.
источник
Вы можете просто использовать
метод следующим образом
и вызовите onRestart (), где вы хотите перезапустить текущую активность
источник
Вызовите метод onCreate. Например
onCreate(null);
источник