use startActivityForResult desde la no actividad

82

Tengo MainActivity que es una Activity y otra clase (que es una clase Java simple), la llamaremos "SimpleClass". ahora quiero ejecutar desde esa clase el comando startActivityForResult.

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

entonces la única forma de hacer SimpleClass para usar 'startActivityForResult; es pasar la referencia de MainActivity como una variable de actividad a SimpleClass algo así:

dentro de la clase MainActivity creo la instancia de SimpleClass de esta manera:

SimpleClass simpleClass=new SimpleClass(MainActivity.this);

ahora así es como se ve SimpleClass:

public Class SimpleClass {

Activity myMainActivity;

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


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

}

ahora está funcionando, pero ¿no es una forma adecuada de hacerlo? Me temo que podría tener algunas pérdidas de memoria en el futuro.

Gracias. rayo.

Rayman
fuente
No sé qué estás intentando hacer, pero deberías leer esto .
Macarse
1
Al hacer esto, ¿podría usar el onActivityResultmétodo dentro de su simpleClass o no tenía la intención de hacerlo? El mismo problema aquí ..
Vivere_FlowCoder

Respuestas:

64

No sé si esto es una buena práctica o no, pero se casting a Context object to an Activity objectcompila bien.

Prueba esto:

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

Esto debe compilarse y los resultados deben entregarse a la actividad real que contiene el contexto.

Algún estudiante novato
fuente
¿Qué tal si el contexto se transmite desde un servicio?
Madhur Ahuja
9
No, ¡lanza una excepción de transmisión!
Lisa Anne
1
Un contexto no es inevitablemente una actividad (por ejemplo, si se consigue conmyActivity.getApplicationContext()
Hugo Gresse
Si el objetivo es evitar una pérdida de memoria, ¿qué ventaja tiene mantener un contexto como variable miembro de una clase sobre la realización de una actividad? ¿El almacenamiento de un contexto no tiene el mismo potencial de provocar una pérdida de memoria que el almacenamiento de una actividad?
stevehs17
4

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

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

¿Hace myMainActivityalgo con el resultado? Si es así, simplemente cree SimpleClassuna subclase de Actividad y maneje el resultado desde dentro SimpleClass.
Si myMainActivitynecesita el resultado, tal vez debería refactorizar el código desde el que iniciar la actividad myMainActivity.

usuario de codificación
fuente
2
Estoy usando el resultado, solo quiero separarlo en una clase diferente, así que me preguntaba cómo debo pasar un parámetro de actividad a una clase sin actividad, sin causar fugas en el futuro.
Rayman
1
¿Qué hay de hacer de SimpleClass una clase anidada?
codinguser
0

La mejor solución es:

  1. Hacer SimpleClassuna subclase de tu Activityclase
  2. llamando a otra actividad como startActivityForResult
  3. manejando el resultado dentro de SimpleClasssí mismo
gtiwari333
fuente
3
Parece que esto debería funcionar, pero tengo esto:java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
Chico