OnActivityResult Para Fragmento
Actualmente tengo una actividad base que alberga un solo fragmento. Dentro del fragmento tengo un método que inicia el selector de contacto.
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); }
Cuando esta actividad devuelve cómo debo capturar los resultados. He intentado agregar un
- Extraños problemas de tartamudez que no puedo deshacerse de (fuente completa incluida)
- Usando Butter Knife en Custom BaseAdapter SubClass Resultados en el error "Unable to inject views"
- Estados dibujables con colores (no dibujables)
- Concepto de clase interna de Android y Java
- ¿Por qué no aparece mi brindis?
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //Handle Code }
Tanto a mi actividad base como al fragmento, pero ninguno de los dos métodos se activa. Si es posible, quisiera que el fragmento manejara la devolución para no enturbiar la actividad.
Por favor, hágamelo saber cuál es la mejor práctica en esta situación.
Actualizar:
Si cambio:
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
a
getActivity().startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
Entonces funciona, pero otros mensajes me han hecho pensar que es incorrecto.
- Obtener OnActivityResult al volver de startActivityForResult en Adapter
- MPAndroidChart no está actualizando
- Creación de un registro WiFi NDEF utilizando application / vnd.wfa.wsc en Android
- Compartir recursos entre el contexto de OpenGL en Android
- GreenBroot EventBus no pudo enviar el evento
- Ormlite configuración sin utilizar las actividades de base
- ¿Por qué necesitamos 9 parches?
- Cliente Android / socket de servidor Java; Android enviar pero no recibir?
Creo que todavía debe utilizar la llamada startActivityForResult()
directamente en el fragmento, no use getActivity().startActivityForResult()
.
Llamo a startActivityForResult()
en Fragmento e implemento el onActivityResult
en Fragment, el onActivityResult()
se llama correctamente.
No se puede llamar a startActivityForResult()
en actividad, de lo contrario no se llamará onActivityResult()
en Fragment.
En mi caso lo hice en mi Actividad de Padres
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); for (Fragment fragment : getSupportFragmentManager().getFragments()) { fragment.onActivityResult(requestCode, resultCode, data); } }
El onActivityCreated
del fragmento sirve a otro propósito:
Se llama cuando se ha creado la actividad del fragmento y se ha instanciado la jerarquía de este fragmento. Se puede utilizar para hacer la inicialización final una vez que estas piezas están en su lugar, como recuperar vistas o restaurar el estado. También es útil para fragmentos que utilizan setRetainInstance (boolean) para conservar su instancia, ya que esta devolución de llamada le dice al fragmento cuando está totalmente asociado con la nueva instancia de actividad. Esto se llama después onCreateView (LayoutInflater, ViewGroup, Bundle) y antes de onViewStateRestored (Bundle).
Esto se extrae de la documentación
Principalmente con un fragmento se inflar y devolver la vista en el onCreateView
, hacer las operaciones de vista (como establecer un ListAdapter
en un ListView
) en el onViewCreated
. Y realizar las operaciones de inicialización (como mostrar un diálogo de bienvenida o algo así) en el onActivityCreated
.
Usted tiene, varias opciones, no estoy bastante seguro de que es mejor para su problema:
-
Lo que haría será hacer un
findFragmentById
en elonActivityResult
de la actividad, y si el fragmento no esnull
, ejecuta un método que maneja el volver de la lista de contactos en el fragmento. -
Otra forma de hacerlo es disparar un
BroadCastReceiver
en elonActivityResult
de la actividad, y registrarlo fragmentará para escuchar esa transmisión. Pero creo que esto es demasiado complicado para algo tan simple. -
Finalmente, al igual que el primero, si no tiene un fragmento con un id, puede instanciar el fragmento en su actividad, guardar una referencia y enviarle un mensaje cuando se
onActivityResult
elonActivityResult
de la actividad.
Espero que algo de esto le ayude.
Esto le ayudará onActivityResult
en Fragments
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
Y
public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PLACE_PICKER_REQUEST) { if (resultCode == Activity.RESULT_OK) { Place place = PlacePicker.getPlace(data, getActivity()); } } }
- Error de representación de Gaveta de navegación en ADT Layout Editor
- Implementar desplazamiento sin fin en ListView