2011-02-15 9 views
7

Estoy tratando de hacer una clase de ayuda para iniciar Activity y obtener el resultado de retorno (startActivityForResult) para evitar que los desarrolladores escriban su propio código onActivityResult y encapsular los detalles internos complejos.Manejo onActivityResult desde fuera de Activity

es decir: el código de la persona que llama:

MyIntent i = new MyIntent(); 
i.getMyData(new OnData() { public void onData(Bundle data) {....}); 

intenté crear un "ficticio" Activity dentro myIntent sólo para ser capaz de anular onActivityResult, pero la actividad tiene que ser declarada en el manifiesto, que es lo que el clase de ayudante intenta evitar. No hay "setOnActivityResult", que sería una buena alternativa.

Entonces, ¿cómo crear un Activity programáticamente y "adjuntarlo" para que tenga un estado válido?

Después de crear new Activity() me gustaría llamar a la actividad "adjuntar" que es interna.

+0

¿Has encontrado la solución a este problema? – captaindroid

Respuesta

1

Entonces, ¿cómo crear una actividad programáticamente y "adjuntarla" para que tenga un estado válido?

Eso no es posible, lo siento.

estoy tratando de hacer una clase de ayuda para iniciar una actividad y obtener el resultado de retorno (startActivityForResult) para evitar desarrolladores que escriben su propio código onActivityResult y encapsular los complejos detalles internos.

Eso no es posible, lo siento. Lo más cercano que puede obtener es cómo funciona el JAR de integración del escáner de código de barras: delegue onActivityResult() para decodificar el resultado obtenido de la actividad del escáner.

+1

También estoy intentando lo mismo, solo revisa http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityResultListener.html Estoy usando esto para llamar al método onActivityResult() en una clase personalizada pero no es trabajando ... si tienes alguna idea ... entonces porfavor publica ... :) –

0

¿Podría una devolución de llamada simple ser una alternativa? El usuario coloca la devolución de llamada en el campo estático de su biblioteca y su biblioteca invocará esta devolución de llamada cuando sea necesario. La implementación más sencilla podría ser:

YourSdk.staticCallbackField=new OnData() { public void onData(Bundle data) {....}); 
MyIntent i = new MyIntent(); 
startActivity(i); 

Cuando SDK completa su trabajo invoca devolución de llamada:

staticCallbackField.onData(data) 

la actividad del usuario obtendrá los datos Bundle en vez de devolución de llamada onActivityResult.

Debe tener en cuenta posibles problemas de ciclo de vida de la actividad. Por ejemplo, si Android recrea la actividad del usuario en la devolución de llamada de fondo debe ser recreada.

Cuestiones relacionadas