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.
onActivityResult
método dentro de su simpleClass o no tenía la intención de hacerlo? El mismo problema aquí ..Respuestas:
No sé si esto es una buena práctica o no, pero se
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 debe compilarse y los resultados deben entregarse a la actividad real que contiene el contexto.
fuente
myActivity.getApplicationContext()
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
myMainActivity
algo con el resultado? Si es así, simplemente creeSimpleClass
una subclase de Actividad y maneje el resultado desde dentroSimpleClass
.Si
myMainActivity
necesita el resultado, tal vez debería refactorizar el código desde el que iniciar la actividadmyMainActivity
.fuente
La mejor solución es:
SimpleClass
una subclase de tuActivity
clasestartActivityForResult
SimpleClass
sí mismofuente
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference