Si nous avons deux activités:
- Liste des fichiers et heure de la dernière modification
- Activité d'édition de fichiers
Un utilisateur sélectionne un fichier dans la liste et est dirigé vers l'activité d'édition de fichier. Une fois l'édition terminée, l'utilisateur appuie sur le bouton retour pour revenir à la liste des fichiers.
La liste n'est pas rechargée et par conséquent une valeur incorrecte est affichée pour l'heure de modification des fichiers qui viennent d'être édités.
Quelle est la méthode appropriée pour actualiser la liste de fichiers après avoir appuyé sur le bouton de retour?
Cet exemple suppose qu'aucune base de données n'est utilisée, juste un ArrayAdapter.
Réponses:
Une option serait d'utiliser le onResume de votre première activité.
@Override public void onResume() { // After a pause OR at startup super.onResume(); //Refresh your stuff here }
Ou vous pouvez démarrer l'activité pour le résultat:
Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1);
Dans secondActivity si vous souhaitez renvoyer des données:
Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(RESULT_OK,returnIntent); finish();
si vous ne souhaitez pas renvoyer de données:
Intent returnIntent = new Intent(); setResult(RESULT_CANCELED, returnIntent); finish();
Maintenant, dans votre classe FirstActivity, écrivez le code suivant pour la
onActivityResult()
méthodeprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK){ //Update List } if (resultCode == RESULT_CANCELED) { //Do nothing? } } }//onActivityResult
la source
onResume
pas m'appeler, une idée pourquoi? ( J'ai essayéonRestart
etonPause
aussi, mais aucun d'entre eux n'a été appelé )Je pense que onRestart () fonctionne mieux pour cela.
@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 }
Vous pouvez coder ce que vous voulez faire lorsque l'activité est redémarrée (appelée à nouveau à partir de l'événement «bouton de retour appuyé») dans onRestart ().
Par exemple, si vous voulez faire la même chose que vous faites dans onCreate (), collez le code dans onRestart () (par exemple, reconstruire l'interface utilisateur avec les valeurs mises à jour).
la source
en principal:
@Override public void onRestart() { super.onRestart(); finish(); startActivity(getIntent()); }
la source
Je recommanderais de remplacer la
onResume()
méthode dans l'activité numéro 1 et d'inclure du code pour actualiser votre adaptateur de tableau, cela se fait en utilisant[yourListViewAdapater].notifyDataSetChanged();
Lisez ceci si vous rencontrez des difficultés pour actualiser la liste: Actualisation de la vue Liste Android
la source
Si vous souhaitez actualiser l'activité précédente, cette solution devrait fonctionner:
Dans l'activité précédente où vous souhaitez actualiser:
@Override public void onRestart() { super.onRestart(); // do some stuff here }
la source
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(); } }
J'ai juste la catégorie des favoris, donc lorsque je clique sur l'élément des favoris, ces informations apparaissent et si je ne l'aime pas - cet élément doit être supprimé des favoris: pour cela, je rafraîchis la base de données et le configure sur adaptateur (pour recyclerview) [Je vous souhaite comprendra mon problème et ma solution]
la source
@Override protected void onRestart() { super.onRestart(); finish(); overridePendingTransition(0, 0); startActivity(getIntent()); overridePendingTransition(0, 0); }
Dans l'activité précédente, utilisez ce code. Cela fera une transition en douceur et rechargera l'activité lorsque vous reviendrez en appuyant sur le bouton de retour.
la source
Si vous ne gérez pas un rappel de l'activité d'édition (avec onActivityResult), alors je préfère mettre la logique que vous avez mentionnée dans onStart (ou peut-être dans onRestart), car l'avoir dans onResume semble exagéré, étant donné que les changements ne se produisent qu'après onStop.
Dans tous les cas, familiarisez-vous avec le cycle de vie des activités . De plus, notez les méthodes onRestoreInstanceState et onSaveInstanceState, qui n'apparaissent pas dans le joli diagramme du cycle de vie.
(En outre, il vaut la peine de revoir la façon dont le didacticiel du bloc-notes gère ce que vous faites, bien qu'il utilise une base de données.)
la source
Le meilleur moyen d'y parvenir est d'utiliser
Intent i = new Intent(this.myActivity, SecondActivity.class); startActivityForResult(i, 1);
la source
Essaye ça
public void refreshActivity() { Intent i = new Intent(this, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); }
ou en Fragment
public void refreshActivity() { Intent i = new Intent(getActivity(), MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); finish(); }
Et ajoutez cette méthode à votre onBackPressed () comme
@Override public void onBackPressed() { refreshActivity(); super.onBackPressed(); } }
C'est ça...
la source
@Override public void onBackPressed() { Intent intent = new Intent(this,DesiredActivity.class); startActivity(intent); super.onBackPressed(); }
la source