Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 01/09/13, 09:38:01
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
onActivityResult dos dudas

Saludos compañeros , tengo dos dudas con ese evento , resulta que lo utilizo en unos fragments los cuales están en una activity contenedora , he probado llamar onactivityresult con unos intents desde el java de cada fragment y no resulta, onactivityresult siempre es llamado en la activity contenedora , he conseguido que funcione lanzando el intent y el evento desde activity contenedora, pero esto supone mucho mas código , instanciar los fragments y usar métodos para realizar acciones según resultado, he leido que es un fallo de de la libreria de soporte v4 , tiene esto alguna solución menos engorrosa?

Mi otra duda es , si se puede en intents de este tipo pasar datos extra , por ejemplo:


Código:
Intent in = new Intent();
				in.putExtra("id",getId());// este dato no lo consigo obtener
				in.setType("image/*");
				in.setAction(Intent.ACTION_GET_CONTENT);
				
				getActivity().startActivityForResult(Intent.createChooser(in, "Select Picture"),
						CHOSE_IMAGE);
Bien , en onactivityresult deberia poder obtener "id" con un data.getInt("id"); u otras que he probado , solo consigo obtener la uri de la imagen con data.getdata() , compodria hacer para pasar mas datos en este intent ? que hago mal?
Responder Con Cita


  #2  
Viejo 01/09/13, 11:29:49
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Lo que hay que hacer es poner el siguiente código en la Activity:

@override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
getSupportFragmentManager().findFragmentById(AQUI_ EL_ID).onActivityResult(requestCode,resultCode,dat a);
}

Haciendo eso haces que la Activity invoque al onActivityResult del Fragment, a mi me funciona perfectamente.

Y en cuanto a la segunda pregunta, el Bundle que te devuelve el onActivityResult es un Bundle completamente nuevo, que nada tiene que ver con el que tú enviaste. Así que si la Activity a la que llamas no te devuelve ningún valor "id" no lo vas a obtener aunque tú lo hayas mandado.

Última edición por kriogeN Día 01/09/13 a las 11:32:44.
Responder Con Cita
  #3  
Viejo 01/09/13, 16:08:20
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Gracias por responder kriogen , en mi primera pregunta quería decir si desde el java del fragment se podía utilizar onactivityresult , pero según tu respuesta veo que lo manejas como yo lo he hecho al final , todo desde el activity contenedora.

Sobre la segunda respuesta , ahora entiendo algo mas sobre ese tipo de intents , pero sigo con mi duda si no es asi ... como puedo mandar y obtener mas datos al mismo tiempo que el lanzo el inteny? con un bundle nuevo? que harías tu?
Responder Con Cita
  #4  
Viejo 01/09/13, 16:27:27
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por rafaxplayer Ver Mensaje
Gracias por responder kriogen , en mi primera pregunta quería decir si desde el java del fragment se podía utilizar onactivityresult , pero según tu respuesta veo que lo manejas como yo lo he hecho al final , todo desde el activity contenedora.

Sobre la segunda respuesta , ahora entiendo algo mas sobre ese tipo de intents , pero sigo con mi duda si no es asi ... como puedo mandar y obtener mas datos al mismo tiempo que el lanzo el inteny? con un bundle nuevo? que harías tu?
En cuanto a la primera pregunta, realmente si puedes obtener hacer que se ejecute el onActivityResult del Fragment directamente sin pasar por el del Activity, que es llamando a startActivityForResult sin usar el getActivity, es decir, que sea directamente el Fragment el que lo llame. Pero al hacer esto lo que ocurre es que el "requestCode" que llega es incorrecto. Así que es mucho mejor el método de pedírselo a la Activity y que la Activity llame al Fragment.

En cuanto a la segunda pregunta, no entiendo porque quieres mandar datos a una Activity que esa Activity no necesita/no va a usar. La Activity necesita los datos que necesita, ni más ni menos (menos si, algunos son opcionales), por ejemplo el EXTRA_OUTPUT cuando invocas a la cámara.

Si lo que ocurre es que vas a necesitar el "id" para algo en el onActivityResult, pues almacenalo en una variable global de la Activity. Eso si, en ese caso tendrás que también almacenarlo en el onSaveInstanceState y recuperarlo en el onCreate en el caso de que sea una reconstrucción de la Activity. Que nunca se sabe si Android va a destruir tu Activity al crear la nueva y luego volver a reconstruirla. Por ejemplo el S3 Mini siempre que lanzas un onActivityResult para la cámara destruye la Activity que lo ha lanzado para luego reconstruirla.
Responder Con Cita
  #5  
Viejo 01/09/13, 17:43:37
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
aja! todo correcto con tu explicación , solo tengo duda del funcionamiento del onsaveinstancestate aplicado a lo que te comento claro.

Por otro lado me he encontrado con un fallo del intent de reconocimiento de voz , mi codigo funciona perfecto en un lg con 4.0.2 pero en una tablet con 4.0.3 peta , lastima que en la tablet estoy debugeando con la instalación del apk directamente cada vez porque no tiene drivers y no puedo usar eclypse y ver el log.
A que puede ser devido?

Última edición por rafaxplayer Día 01/09/13 a las 17:50:18.
Responder Con Cita
  #6  
Viejo 01/09/13, 18:07:50
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
El onSaveInstanceState sirve para almacenar datos en un Bundle en el caso de que el sistema tenga que destruir la Activity (por ejemplo, si haces una rotación y no tienes puesto "orientation" en el "configChanges" de la Activity, o simplemente porque el sistema la elimine de la memoria porque necesita espacio). Almacenas datos con un put en el Bundle que tiene como parámetro, como harías con cualquier otro Bundle, y finalmente llamas a "super.onSaveInstanceState(outState).

Cuando el sistema vuelva a crear la misma Activity que ha sido eliminada de memoria, el savedInstanceState que va como parámetro en el "onCreate" (y que seguro que hasta ahora te preguntabas para que servía) será distinto de null. Y podrás recuperar de ese Bundle los datos que pusiste en el onSaveInstanceState mediante gets. Si el Bundle que llega como parámetro es null significa que la Activity no había sido destruida antes, que es la primera vez que se ejecuta.

Ojo, esto sólo es para casos en los que es el sistema el que decide eliminar la Activity de memoria, si lo haces tú esto no se produce. Es decir, si le haces "finish" a una Activity y después la vuelves a crear el parámetro que llega en el onCreate será null.

Esto también existe en los Fragments, donde es mucho más habitual que ocurra, por ejemplo si tienes un ViewPager de muchas páginas que el contenido son Fragments, todos los Fragments que estén a más de 1 página de distancia siempre son destruidos (salvo que indiques lo contrario en el ViewPager)

En cuanto a la segunda pregunta, lo único que se me ocurre es que no tenga instalado el reconocimiento de voz de Google, o que no esté bien configurado.
Responder Con Cita
  #7  
Viejo 01/09/13, 19:52:54
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Kriogen te explicas como un libro abierto , entendido a la perfección , gracias por la info.;)
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 09:21:25 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /