2010-05-17 27 views
65

Tengo MainActivity que es una actividad y otra clase (que es una clase java simple), lo llamaremos "SimpleClass". ahora quiero ejecutar desde esa clase el comando startActivityForResult.use startActivityForResult from no-activity

ahora pensé que podría pasar esa clase (SimpleClass), solo el contexto de MainActivity, el problema es que no puedes ejecutar context.startActivityForResult (...);

así que la única manera de hacer que SimpleClass use 'startActivityForResult; es pasar la referencia de MainActivity como una variable de actividad a la SimpleClass algo así:

dentro de la clase MainActivity i crear la instancia de SimpleClass esta manera:

SimpleClass simpleClass=new SimpleClass(MainActivity.this); 

ahora esto es cómo SimpleClass se parece a:

public Class SimpleClass { 

Activity myMainActivity; 

    public SimpleClass(Activity mainActivity) { 
     super(); 
     this.myMainActivity=mainActivity;  
    } 
.... 


    public void someMethod(...) { 
     myMainActivity.startActivityForResult(...); 
    } 

} 

ahora funciona, pero no es una forma adecuada de hacer esto? Temo que podría tener algunas pérdidas de memoria en el futuro.

gracias. ray.

+0

No sé lo que estás tratando de hacer, pero deberías leer [esto] (http://stackoverflow.com/questions/2253088/passing-activity-to-non-activity-object-properly). – Macarse

+1

Al hacer esto, ¿podría usar el método 'onActivityResult' dentro de su simpleClass o no tenía la intención de hacerlo? [Mismo problema aquí ..] (http://stackoverflow.com/questions/25557087/how-to-get-the-result-from-onactivityresult-inside-another-classoutside-of-the/25557182?noredirect = 1 # comment39915501_25557182) –

Respuesta

3

Si necesita obtener el resultado de la actividad anterior, su clase de llamada debe ser de tipo Actividad.

¿Cuál es el propósito de llamar al Activity.startActivityForResult() si nunca usa el resultado (al menos de acuerdo con el código de muestra que publicó).

¿myMainActivity hace algo con el resultado? Si es así, simplemente haga de SimpleClass una subclase de Actividad y maneje el resultado desde el interior de SimpleClass.
Si el resultado es myMainActivity, entonces quizás deba refactorizar el código para iniciar la actividad en myMainActivity.

+2

Estoy usando el resultado, solo quiero separarlo en clase diferente, entonces me preguntaba cómo debería pasar un parámetro de Actividad a una clase que no sea de actividad, sin causar pérdidas en el futuro. – rayman

+1

¿Qué tal hacer de SimpleClass una clase anidada? – codinguser

0

mejor solución es:

  1. Haciendo SimpleClass una subclase de la clase Activity
  2. llamar a otra actividad por startActivityForResult
  3. manejar el resultado dentro de sí SimpleClass
+0

suena como que esto debería funcionar, pero tengo esto: 'java.lang.NullPointerException: Intento de invocar el método virtual 'android.app.ActivityThread $ ApplicationThread android.app.ActivityThread.getApplicationThread()' en una referencia de objeto nulo' – Boy

54

no sé si esta es una buena práctica o no, pero casting a Context object to an Activity object compila bien.

Prueba esto:

if (mContext instanceof Activity) { 
     ((Activity) mContext).startActivityForResult(...); 
} else { 
     Log.e("mContext should be an instanceof Activity."); 
} 

Esto debería compilar, y los resultados deben ser entregados a la actividad real que sostiene el contexto.

+0

Cómo acerca de si el contexto se pasa de un servicio? –

+7

No, ¡lanza una excepción de lanzamiento! –

+1

Un contexto no es inevitablemente una actividad (por ejemplo, si se obtiene con 'myActivity.getApplicationContext()' –