J'ai besoin d'un peu d'aide pour rafraîchir une de mes activités dans ma candidature. J'utilise l'onglet Hôte d'activité et me connecte au service Web et télécharge des données à partir de l'une de mes activités enfants. Lorsque j'appuie sur le bouton de synchronisation dans mon activité enfant, je démarre une nouvelle activité qui n'est pas dans l'onglet Hôte et lorsque la synchronisation est terminée, elle revient à son parent (activité enfant). La chose que je veux réaliser est de rafraîchir l'activité quand j'y reviens. En vérifiant sur Internet, je trouve que la meilleure option pour le faire est d'utiliser startActivityForResult
, mais je ne comprends pas vraiment comment l'utiliser et comment actualiser l'activité lorsque je reçois le résultat de l'activité terminée .
Si quelqu'un peut m'aider, je serai très content. Merci!
ÉDITER:
J'utilise ce code et il n'affiche même pas la connexion onActivityResult
MyCollectionId.class:
Intent intent = new Intent(MyCollectionId.this, Synchronization.class);
intent.putExtra("process", 2);
startActivityForResult(intent, 1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
Log.e("","OnActivityResult");
Intent refresh = new Intent(this, MyCollectionId.class);
startActivity(refresh);
this.finish();
}
}
Synchronization.class:
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
setResult(RESULT_OK,intent);
finish();
Une autre façon délicate de le faire est simplement de démarrer votre activité sur onRestart()
@Override
public void onRestart(){
super.onRestart();
Intent previewMessage = new Intent(StampiiStore.this, StampiiStore.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("StampiiStore", previewMessage);
this.finish();
}
Cela devrait faire l'affaire en fait. (Dans ce code, je montre la façon dont cela se fait lorsque vous utilisez un gestionnaire TabActivity personnalisé.)
sur pression du bouton:
Intent intent = new Intent(this, SyncActivity.class);
//intent.putExtra("someData", "Here is some data");
startActivityForResult(intent, 1);
Puis dans la même classe d'activité:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
Intent refresh = new Intent(this, InitialActivity.class);
startActivity(refresh);
this.finish();
}
}
L'activité de synchronisation aurait:
setResult(RESULT_OK, null);
finish();
Vous devez gérer le résultat de l'activité que vous avez démarrée avec "startActivityForResult" dans une activité parent d'une méthode:
@override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//...
}
Et selon le résultat, vous pouvez simplement invoquer à nouveau un code qui est responsable de l'affichage des informations dans votre activité parent (vous pouvez les mettre dans la méthode onResume () ou comme ça).
Je vous suggère de déplacer toute la logique responsable du rendu des informations vers une méthode distincte. Et invoquez-le après avoir reçu le résultat. Au lieu de redémarrer votre activité parent.
Appelez l'activité enfant à l'aide de startActivityForResult avec le code de demande, SetResult à partir de l'activité enfant. Et lorsque l'activité enfant est terminée, vous pouvez mettre à jour votre activité parent dans la méthode onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
//Check the result and request code here and update ur activity class
}
Voici un exemple http://rahulonblog.blogspot.com/2010/05/Android-startactivityforresult-example.html