Mam MainActivity, która jest aktywnością i inną klasą (która jest prostą klasą Java), nazwiemy to „SimpleClass”. teraz chcę uruchomić z tej klasy polecenie startActivityForResult.
teraz myślę, że mogę przekazać tę klasę (SimpleClass), tylko kontekst MainActivity, problem polega na tym, że nie można uruchomić context.startActivityForResult (...);
więc jedynym sposobem, aby SimpleClass używał 'startActivityForResult; polega na przekazaniu odwołania do MainActivity jako zmiennej Activity do SimpleClass, coś takiego:
wewnątrz klasy MainActivity tworzę instancję SimpleClass w ten sposób:
SimpleClass simpleClass=new SimpleClass(MainActivity.this);
teraz tak wygląda SimpleClass:
public Class SimpleClass {
Activity myMainActivity;
public SimpleClass(Activity mainActivity) {
super();
this.myMainActivity=mainActivity;
}
....
public void someMethod(...) {
myMainActivity.startActivityForResult(...);
}
}
teraz działa, ale czy to nie jest właściwy sposób? Obawiam się, że w przyszłości może dojść do wycieków pamięci.
dzięki. promień.
onActivityResult
metody wewnątrz swojej simpleClass, czy nie zamierzałeś? Ten sam problem tutaj ..Odpowiedzi:
Nie wiem, czy to dobra praktyka, czy nie, ale
casting a Context object to an Activity object
kompiluje się dobrze.Spróbuj tego:
if (mContext instanceof Activity) { ((Activity) mContext).startActivityForResult(...); } else { Log.e("mContext should be an instanceof Activity."); }
Powinno się to skompilować, a wyniki powinny zostać przekazane do rzeczywistego działania trzymającego kontekst.
źródło
myActivity.getApplicationContext()
Jeśli chcesz uzyskać wynik z poprzedniego działania, Twoja klasa wywołująca musi być typu Activity.
Jaki jest cel dzwonienia,
Activity.startActivityForResult()
jeśli nigdy nie użyjesz wyniku (przynajmniej zgodnie z przesłanym przykładowym kodem).Czy
myMainActivity
coś wpływa na wynik? Jeśli tak, po prostu utwórzSimpleClass
podklasę Activity i obsłuż wynik zSimpleClass
siebie.Jeśli
myMainActivity
potrzebujesz wyniku, może powinieneś refaktoryzować kod, od którego rozpocznie się działaniemyMainActivity
.źródło
Lepszym rozwiązaniem jest:
SimpleClass
podklasy TwojejActivity
klasystartActivityForResult
SimpleClass
sobieźródło
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference