Ich habe MainActivity, eine Aktivität, und eine andere Klasse (eine einfache Java-Klasse), wir nennen sie "SimpleClass". Jetzt möchte ich von dieser Klasse aus den Befehl startActivityForResult ausführen.
Jetzt denke ich, dass ich diese Klasse (SimpleClass) übergeben könnte, nur der Kontext von MainActivity. Das Problem ist, dass Sie context.startActivityForResult (...) nicht ausführen können.
Die einzige Möglichkeit für SimpleClass, 'startActivityForResult' zu verwenden. ist, die Referenz von MainActivity als Aktivitätsvariable an die SimpleClass zu übergeben:
Innerhalb der MainActivity-Klasse erstelle ich die Instanz von SimpleClass folgendermaßen:
SimpleClass simpleClass=new SimpleClass(MainActivity.this);
So sieht SimpleClass nun aus:
public Class SimpleClass {
Activity myMainActivity;
public SimpleClass(Activity mainActivity) {
super();
this.myMainActivity=mainActivity;
}
....
public void someMethod(...) {
myMainActivity.startActivityForResult(...);
}
}
Jetzt funktioniert es, aber ist das nicht der richtige Weg, dies zu tun? Ich fürchte, ich könnte in Zukunft einige Speicherlecks haben.
Vielen Dank. Strahl.
onActivityResult
Könnten Sie auf diese Weise die Methode in Ihrer simpleClass verwenden oder wollten Sie das nicht? Gleiches Problem hier ..Antworten:
Ich weiß nicht, ob dies eine gute Praxis ist oder nicht, aber
casting a Context object to an Activity object
kompiliert gut.Versuche dies:
if (mContext instanceof Activity) { ((Activity) mContext).startActivityForResult(...); } else { Log.e("mContext should be an instanceof Activity."); }
Dies sollte kompiliert werden und die Ergebnisse sollten an die tatsächliche Aktivität geliefert werden, die den Kontext enthält.
quelle
myActivity.getApplicationContext()
Wenn Sie das Ergebnis der vorherigen Aktivität erhalten möchten, muss Ihre aufrufende Klasse vom Typ Aktivität sein.
Was ist der Zweck Ihres Anrufs,
Activity.startActivityForResult()
wenn Sie das Ergebnis nie verwenden (zumindest gemäß dem von Ihnen veröffentlichten Beispielcode) ?Hat
myMainActivity
etwas mit dem Ergebnis zu tun? Wenn ja, dann machen Sie einfachSimpleClass
eine Unterklasse von Aktivität und behandeln Sie das Ergebnis ausSimpleClass
sich heraus.Wenn
myMainActivity
das Ergebnis benötigt wird, sollten Sie möglicherweise den Code umgestalten, um die Aktivität zu startenmyMainActivity
.quelle
Bessere Lösung ist:
SimpleClass
eine Unterklasse IhrerActivity
KlassestartActivityForResult
SimpleClass
selbst behandelnquelle
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference