¿Es una buena práctica volver a cargar un Activity
en Android ?
¿Cuál sería la mejor manera de hacerlo? this.finish
y luego this.startActivity
con la actividad Intent
?
¿Es una buena práctica volver a cargar un Activity
en Android ?
¿Cuál sería la mejor manera de hacerlo? this.finish
y luego this.startActivity
con la actividad Intent
?
Respuestas:
Simplemente puedes usar
finish();
startActivity(getIntent());
para refrescar un Activity
desde dentro de sí mismo.
para aquellos que no quieren ver ese parpadeo después del método recreate () simplemente use
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
Esto es lo que hago para volver a cargar la actividad después de cambiar el regreso de un cambio de preferencia.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Esto esencialmente hace que la actividad se vuelva a dibujar.
Actualizado: Una mejor manera de hacer esto es llamar al recreate()
método. Esto hará que la actividad sea recreada.
Vi respuestas anteriores que se han dado para recargar la actividad usando Intent. Esos funcionarán, pero también puede hacer lo mismo usando el método recreate () dado en la clase Activity en sí.
En lugar de escribir esto
// Actualizar la actividad principal al cerrar el cuadro de diálogo
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Esto se puede hacer escribiendo esto solamente
recreate();
recreate()
fue la solución para mí: "reiniciar" la actividad no funcionó para mí, ya que comencé la actividad usando "StartActivityForResult" y rompió el comportamiento.
simplemente use
this.recreate();
esto activará el método onCreate en la actividad
Necesitaba actualizar una lista de mensajes en una de mis aplicaciones a toda prisa, así que simplemente realicé una actualización de mi actividad principal de la interfaz de usuario antes de cerrar el diálogo en el que estaba. Estoy seguro de que también hay mejores maneras de lograr esto.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
Android incluye un sistema de gestión de procesos que maneja la creación y destrucción de actividades que niega en gran medida cualquier beneficio que pueda ver al reiniciar manualmente una actividad. Puede ver más información al respecto en Fundamentos de la aplicación
Sin embargo, lo que es una buena práctica es asegurarse de que sus métodos onPause y onStop liberen todos los recursos que no necesita conservar y utilizar onLowMemory para reducir sus necesidades de actividades al mínimo absoluto.
en algunos casos es la mejor práctica en otros, no es una buena idea que esté basada en el contexto si elige hacerlo, usar la siguiente es la mejor manera de pasar una actividad a sus hijos:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
la cosa es que cuando terminas () de la actividad IWishToRun vuelves a tu actividad vital
Recargar toda su actividad puede ser una tarea pesada. Simplemente ponga la parte del código que debe actualizarse ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
Y llame a " onResume () " cuando sea necesario.
No creo que sea una buena idea ... sería mejor implementar un método más limpio. Por ejemplo, si su actividad contiene un formulario, el método más limpio podría borrar cada widget en el formulario y eliminar todos los datos temporales. Supongo que eso es lo que quieres: restaurar la actividad a su estado inicial.
Después de experimentar con esto por un tiempo, no he encontrado consecuencias inesperadas de reiniciar una actividad. Además, creo que esto es muy similar a lo que Android hace de forma predeterminada cuando cambia la orientación, por lo que no veo una razón para no hacerlo en una circunstancia similar.
yo tengo el mismo problema
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
Este código funciona para mí. Android api 17
En una actividad puede llamar recreate()
para "recrear" la actividad (API 11+)
Tuve otro enfoque como: establecer la launchMode
actividad de mi singleTop
y sin llamar finish()
, simplemente startActivity(getIntent())
hará el trabajo. Solo hay que preocuparse por los nuevos datos tanto en onCreate()
como onNewIntent
. Con el estilo de Sush, la aplicación puede parpadear como dijo AMAN SINGH. Pero el enfoque de AMAN SINGH seguirá creando una nueva actividad que de alguna manera es innecesaria, incluso si soluciona el problema del "parpadeo", creo.
Demasiado tarde para esta pregunta, pero si alguien busca una solución, aquí está.
Después de iniciar sesión tuve el mismo problema, así que usé
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
Utilicé esto y funciona bien sin
finish()
startActivity(getIntent());
para mí está funcionando, no está creando otras intenciones y en la misma se cargaron las nuevas intenciones.
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);