Si tenemos dos actividades:
- Lista de archivos y hora de última modificación
- Actividad de edición de archivos
Un usuario selecciona un archivo de la lista y es llevado a la actividad de edición de archivos. Cuando termine de editar, el usuario presiona el botón Atrás para regresar a la lista de archivos.
La lista no se vuelve a cargar y, por lo tanto, se muestra un valor incorrecto para el tiempo de modificación de los archivos recién editados.
¿Cuál es el método adecuado para hacer que la lista de archivos se actualice después de presionar el botón Atrás?
Este ejemplo asume que no se está utilizando ninguna base de datos, solo un ArrayAdapter.
Respuestas:
Una opción sería utilizar el onResume de su primera actividad.
@Override public void onResume() { // After a pause OR at startup super.onResume(); //Refresh your stuff here }
O puede iniciar Actividad para Resultado:
Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1);
En secondActivity si desea devolver datos:
Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(RESULT_OK,returnIntent); finish();
si no desea devolver datos:
Intent returnIntent = new Intent(); setResult(RESULT_CANCELED, returnIntent); finish();
Ahora en su clase FirstActivity escriba el siguiente código para el
onActivityResult()
métodoprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK){ //Update List } if (resultCode == RESULT_CANCELED) { //Do nothing? } } }//onActivityResult
fuente
onResume
no me llamaron, ¿alguna idea de por qué? ( Lo intentéonRestart
yonPause
también, pero ninguno de ellos no llamó )Creo que onRestart () funciona mejor para esto.
@Override public void onRestart() { super.onRestart(); //When BACK BUTTON is pressed, the activity on the stack is restarted //Do what you want on the refresh procedure here }
Puede codificar lo que desea hacer cuando se reinicia la actividad (se llama nuevamente desde el evento 'botón de retroceso presionado') dentro de onRestart ().
Por ejemplo, si desea hacer lo mismo que hace en onCreate (), pegue el código en onRestart () (por ejemplo, reconstruyendo la interfaz de usuario con los valores actualizados).
fuente
en principal:
@Override public void onRestart() { super.onRestart(); finish(); startActivity(getIntent()); }
fuente
Recomendaría anular el
onResume()
método en la actividad número 1, y allí incluir código para actualizar su adaptador de matriz, esto se hace usando[yourListViewAdapater].notifyDataSetChanged();
Lea esto si tiene problemas para actualizar la lista: Actualización de la vista de lista de Android
fuente
Si desea actualizar la actividad anterior, esta solución debería funcionar:
En la actividad anterior donde desea actualizar:
@Override public void onRestart() { super.onRestart(); // do some stuff here }
fuente
private Cursor getAllFavorites() { return mDb.query(DocsDsctnContract.DocsDsctnEntry.Description_Table_Name, null, null, null, null, null, DocsDsctnContract.DocsDsctnEntry.COLUMN_Timest); } @Override public void onResume() { // After a pause OR at startup super.onResume(); mAdapter.swapCursor(getAllFavorites()); mAdapter.notifyDataSetChanged(); } public void swapCursor(Cursor newCursor){ if (mCursor!=null) mCursor.close(); mCursor = newCursor; if (newCursor != null){ mAdapter.notifyDataSetChanged(); } }
Solo tengo la categoría de favoritos, así que cuando hago clic en el elemento de favoritos, aparece dicha información y, si no me gusta, este elemento debe eliminarse de Favoritos: para eso, actualizo la base de datos y la configuro en el adaptador (para la vista de reciclaje) [Te deseo entenderá mi problema y mi solución]
fuente
@Override protected void onRestart() { super.onRestart(); finish(); overridePendingTransition(0, 0); startActivity(getIntent()); overridePendingTransition(0, 0); }
En la actividad anterior use este código. Esto hará una transición suave y recargará la actividad cuando regrese presionando el botón Atrás.
fuente
Si no está manejando una devolución de llamada de la actividad de edición (con onActivityResult), entonces prefiero poner la lógica que mencionó en onStart (o posiblemente en onRestart), ya que tenerla en onResume parece una exageración, dado que los cambios solo ocurren después onStop.
En cualquier caso, familiarícese con el ciclo de vida de la actividad . Además, tome nota de los métodos onRestoreInstanceState y onSaveInstanceState, que no aparecen en el bonito diagrama de ciclo de vida.
(Además, vale la pena revisar cómo el Tutorial del Bloc de notas maneja lo que está haciendo, aunque usa una base de datos).
fuente
La mejor manera de hacerlo es usando
Intent i = new Intent(this.myActivity, SecondActivity.class); startActivityForResult(i, 1);
fuente
Prueba esto
public void refreshActivity() { Intent i = new Intent(this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); }
o en fragmento
public void refreshActivity() { Intent i = new Intent(getActivity(), MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); }
Y agregue este método a su onBackPressed () como
@Override public void onBackPressed() { refreshActivity(); super.onBackPressed(); } }
Eso es...
fuente
@Override public void onBackPressed() { Intent intent = new Intent(this,DesiredActivity.class); startActivity(intent); super.onBackPressed(); }
fuente