onActivityResult Pour Fragment
J'ai actuellement une base de l'activité de qui est l'hôte d'un seul fragment. À l'intérieur du fragment, j'ai une méthode qui commence le contact sélecteur.
private void chooseContacts() {
Intent pickContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}
Lorsque cette activité renvoie comment dois-je capturer les résultats. J'ai essayé d'ajouter un
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Handle Code
}
à mes deux Activités de base et le fragment, mais ni la méthode qui a été déclenché. Si possible j'aimerais avoir le fragment de gérer le retour afin de ne pas compliquer l'activité.
S'il vous plaît laissez-moi savoir ce que la meilleure pratique est dans cette situation.
Mise à jour:
si je change d':
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
à
getActivity().startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
il fonctionne, mais d'autres postes ont fait de moi pense que c'est incorrect.
- Assurez-vous également que votre hostActivity mode de lancement n'est pas définie à singleTask ou à instance unique stackoverflow.com/a/38760091/3496570
Vous devez vous connecter pour publier un commentaire.
Je pense que vous devriez toujours utiliser l'appel
startActivityForResult()
directement dans le fragment, pas d'utilisationgetActivity().startActivityForResult()
.J'appelle le
startActivityForResult()
du Fragment et de mettre en œuvre laonActivityResult
dans le Fragment, laonActivityResult()
est appelée correctement.vous ne pouvez pas appeler
startActivityForResult()
de l'activité, sinon leonActivityResult()
du Fragment ne sera pas appelé.Dans mon cas, je l'ai fait dans mon Activité Parent
La
onActivityCreated
du fragment sert un autre but:Appelé lorsque le fragment de l'activité a été créé, et ce fragment de la vue de la hiérarchie instancié. Il peut être utilisé pour effectuer l'initialisation une fois ces éléments en place, comme la récupération de points de vue ou de la restauration de l'état. Il est également utile pour les fragments qui utilisent setRetainInstance(boolean) pour conserver leur exemple, que ce rappel à l'indique le fragment lorsqu'il est pleinement associé à la nouvelle instance d'activité. Ceci est appelé après onCreateView(LayoutInflater, ViewGroup, Bundle) et avant onViewStateRestored(Bundle).
C'est extraite de la la documentation
Principalement avec un fragment vous permettra de gonfler et de retour de la vue dans la
onCreateView
, faire le point de vue de l'exploitation (comme unListAdapter
dans unListView
) dans leonViewCreated
. Et effectuer les opérations d'initialisation (comme afficher une boîte de dialogue de bienvenue ou quelque chose comme ça) dans leonActivityCreated
.Vous avez plusieurs choix, je ne suis pas assez sûr de ce qui est mieux pour votre problème:
Ce que je ferais sera be faire un
findFragmentById
dans leonActivityResult
de l'activité, et si le fragment n'est pasnull
, exécuter une méthode qui gère le retour de la liste de contacts dans le fragment.Une autre façon de faire le feu est
BroadCastReceiver
dans leonActivityResult
de l'activité, et de vous inscrire fragment d'écouter que de la diffusion. Mais je pense que c'est trop salissant pour quelque chose de si simple.Enfin, comme le premier, si vous ne disposez pas d'un fragment à un id, vous pouvez instancier le fragment dans votre activité, enregistrer une référence, et de lui envoyer un message lorsque le
onActivityResult
de l'activité est exécutée.J'espère que cela vous aide.
Cela vous aidera à
onActivityResult
dans les FragmentsEt