Це хороша практика для перезавантаження Activity
в Android ?
Який був би найкращий спосіб зробити це? this.finish
а потім this.startActivity
з діяльністю Intent
?
Це хороша практика для перезавантаження Activity
в Android ?
Який був би найкращий спосіб зробити це? this.finish
а потім this.startActivity
з діяльністю Intent
?
Відповіді:
Ви можете просто використовувати
finish();
startActivity(getIntent());
оновити Activity
зсередини себе.
для тих, хто не хоче бачити це моргання після методу відтворення (), просто використовуйте
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Це те, що я роблю, щоб перезавантажити діяльність після зміни повернення зі зміни уподобань.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Це по суті змушує діяльність перемальовуватися.
Оновлено: Кращий спосіб зробити це - викликати recreate()
метод. Це призведе до відтворення діяльності.
Я бачив раніше відповіді, які були дані для перезавантаження діяльності за допомогою Intent. Вони працюватимуть, але ви можете зробити те ж саме, використовуючи метод відтворення (), наведений у самому класі активності.
Замість того, щоб писати це
// Оновити основну діяльність після закриття діалогового вікна
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Це можна зробити, лише написавши це
recreate();
recreate()
було рішенням для мене - "перезапуск" активність не працювала для мене, оскільки я розпочав діяльність за допомогою "StartActivityForResult", і це порушило поведінку.
просто використовувати
this.recreate();
це запустить метод onCreate у діяльності
Мені потрібно було поспішно оновити список повідомлень в одній із моїх програм, тому я просто здійснив оновлення моєї основної діяльності у користувальницькому інтерфейсі, перш ніж закрити діалогове вікно, в якому я знаходився. Впевнений, що є й кращі способи досягти цього.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android включає в себе систему управління процесами, яка керує створенням та знищенням діяльності, що значною мірою заперечує будь-яку користь, яку ви побачите від ручного перезавантаження діяльності. Докладнішу інформацію про нього можна знайти в розділі " Основи програми"
Хоча найкраща практика - це забезпечити, щоб ваші методи onPause та onStop звільнили будь-які ресурси, які вам не потрібно утримувати і використовувати onLowMemory для зменшення потреб у вашій діяльності до абсолютного мінімуму.
в деяких випадках це найкраща практика, в інших - не гарна ідея, що це керується контекстом, якщо ви вирішили це зробити, використовуючи наступний спосіб - найкращий спосіб перейти від діяльності до її синів:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
річ полягає в тому, що коли ви закінчите () з діяльності IWishToRun, ви повернетесь до своєї життєвої діяльності
Перезавантажити всю свою діяльність може бути важким завданням. Просто поставте ту частину коду, яку потрібно оновити ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
І телефонуйте " onResume () ", коли це потрібно.
Я не думаю, що це гарна ідея ... краще було б застосувати чистіший метод. Наприклад, якщо ваша діяльність містить форму, метод очищення може просто очистити кожен віджет у формі та видалити всі тимчасові дані. Я думаю, що ви цього хочете: відновіть активність до початкового стану.
Дещо експериментуючи з цим, я не виявив жодних несподіваних наслідків перезапуску діяльності. Крім того, я вважаю, що це дуже схоже на те, що Android робить за замовчуванням, коли орієнтація змінюється, тому я не бачу причини не робити цього за подібних обставин.
У мене така ж проблема
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
цей код працює для мене. Android api 17
У діяльності ви можете закликати recreate()
"відтворити" діяльність (API 11+)
У мене був інший підхід на кшталт: якщо встановити launchMode
свою діяльність на singleTop
та без дзвінків finish()
, я просто startActivity(getIntent())
зроблю цю роботу. Просто потрібно дбати про нові дані і в, onCreate()
і вonNewIntent
. За допомогою Суша програма може блимати так, як сказав АМАН СІНГ. Але підхід AMAN SINGH все одно створить нову діяльність, яка є якось непотрібною, навіть якщо він вирішив проблему "моргання", я думаю.
Надто пізно для цього питання, але якщо хтось шукає рішення, ось він.
Після входу у мене була та сама проблема, тому я і використовував
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
Я використав це, і він відмінно працює без цього
finish()
startActivity(getIntent());
для мене це працює, це не створювати ще одного Інтенту і на ті самі завантажені нові дані Intents.
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);