Можно ли перезагрузить Activity
в Android?Обновить активность в Android
Какой был бы лучший способ сделать это? this.finish
, а затем this.startActivity
с деятельностью Intent
?
Можно ли перезагрузить Activity
в Android?Обновить активность в Android
Какой был бы лучший способ сделать это? this.finish
, а затем this.startActivity
с деятельностью Intent
?
Вы можете просто использовать
finish();
startActivity(getIntent());
, чтобы освежить Activity
внутри себя.
Что делать, если он не может быть вызван внутри класса активности ?, любым способом сделать это с помощью ссылки на контекст? – giorgiline
@giorgiline - Да, создайте интерфейс, который вы определяете внутри класса активности, и передайте этот интерфейс как параметр любому внешнему классу, из которого вы его используете. – aggregate1166877
Ничего себе, я не думал, что это будет так просто. – theblang
Я не думаю, что это хорошая идея ... было бы лучше реализовать более чистый метод. Например, если ваша активность содержит форму, метод clean может просто очистить каждый виджет в форме и удалить все временные данные. Наверное, это то, что вы хотите: восстановить активность в исходное состояние.
в некоторых случаях это лучшая практика в других это не очень хорошая идея, это контекст, управляемый , если вы решили сделать это, используя следующее лучший способ перейти от деятельности к своим сыновьям:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
вещь, когда вы заканчиваете() от деятельностиIWishToRun, вы возвращаетесь к своей живой деятельности
Это, возможно, старый, но вы просто спасли меня много времени! :) –
Android включает в себя систему управления процессом, которая обрабатывает создание и уничтожение действий, что в значительной степени отрицает любую выгоду, которую вы увидите при ручном перезапуске деятельности , Вы можете увидеть дополнительную информацию об этом по адресу Application Fundamentals
Какова хорошая практика, однако, чтобы гарантировать, что ваши методы onPause и onStop освобождают любые ресурсы, которые вам не нужно удержать, и использовать onLowMemory, чтобы уменьшить ваши действия, необходимо абсолютный минимум.
+1 для упоминания onLowMemory. Я не знал, что такой метод существует! – hpique
Проведя некоторое время, я не обнаружил неожиданных последствий перезапуска активности. Кроме того, я считаю, что это очень похоже на то, что Android делает по умолчанию, когда меняется ориентация, поэтому я не вижу причины не делать этого в подобных обстоятельствах.
Напротив, я попытался «обновить» свой экран, перезапустив его. Не кажется, что на поверхности ничего не получилось, моя информация обновила то, что я хотел, LogCat рассказывает другую историю. В LogCat я возвращаюсь к методу onCreate активности, он пытается вытащить предпочтения. 1-я попытка. Я получаю исключение с нулевым указателем, затем он снова пытается запустить в onCreate и получает хранимый параметр 2-го раза. Не уверен, что здесь происходит, но я просто хотел быть уверенным, что вы не просто смотрите на результат, потому что WYSIWIG не подходит для меня. – taraloca
Как именно вы перезапускаете мероприятие? – hpique
Мне нужно было быстро обновить список сообщений в одном из моих приложений, поэтому я только что обновил свой основной пользовательский интерфейс до того, как закрыл диалоговое окно, в котором я находился. Я уверен, что есть лучшие способы достижения это также.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
простой и эффективный – Matthew
Это то, что я делаю, чтобы изменить активность после изменения возврата из предпочтения.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Это по существу заставляет операцию перерисовывать себя.
Обновлено: Лучший способ сделать это - вызвать метод recreate(). Это приведет к воссозданию активности.
Спасибо ... Работает как шарм !!! – user1744952
Возможно, это работает, но настоятельно не рекомендуется явно вызывать методы жизненного цикла. – ITisha
Если вы берете этот маршрут, вы должны использовать отдельный метод init(), который устанавливает все и вызывает это изнутри onCreate() и onResume() вместо вызова onCreate(). – Tom
Начните с намерения с тем же activity
и закройте activity
.
Intent refresh = new Intent(this, Main.class);
startActivity(refresh);//Start the same Activity
finish(); //finish Activity.
у меня есть такая же проблема
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
этот код работает для меня. Android апи 17
для тех, кто не хочет видеть, что мигает после воссоздавать() метод просто использовать
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Удивительный! Я хотел переопределить переход так, чтобы пользователь не заметил! – Tuna
У меня был другой подход, как: постановка launchMode
моей деятельности в singleTop
и без звонка finish()
, только startActivity(getIntent())
выполнит эту работу. Просто нужно заботиться о новых данных как в onCreate()
, так и в onNewIntent
. С Sush's way приложение может мигать, как сказал AMAN SINGH. Но подход AMAN SINGH по-прежнему будет создавать новую деятельность, которая как-то не нужна, даже если он исправил проблему «мигания», я думаю.
Слишком поздно для этого вопроса, но если кто-то ищет решение, вот оно.
Я видел более ранние ответы, которые были даны для перезагрузки активности с использованием Intent. Они будут работать, но вы также можете сделать то же самое с помощью метода recreate(), указанного в классе Activity.
Вместо того, чтобы писать этот
// Основная деятельность Refresh после закрытия диалогового окна
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Это может быть сделано в письменной форме это только
recreate();
Я не опытный разработчик Android , но перезапуск Activity звучит как плохой дизайн и должен выполняться только в крайних случаях. – Hudson
@ Hudson Это то, что происходит при изменении конфигурации. Если это хороший дизайн или нет, это еще одно обсуждение. ;) – hpique