Rozpoczynam Activity
(potomka PreferenceActivity
) od mojej działalności pracowniczej w następujący sposób:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1458)
loadInfo();
}
void showSettingsDialog()
{
startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}
MyConfigure
klasa NIE ma żadnych setResult()
wywołań. W rzeczywistości MyConfigure
klasa nie ma żadnego kodu, z wyjątkiem miejsca, w OnCreate()
którym ładuje preferencje za pomocą addPreferencesFromResource
.
Teraz onActivityResult
jest wywoływana z requestCode
z 1458
przedwcześnie, zaraz po MyConfigure
uruchomieniu czynności. Testowano na emulatorach 1.6 i 2.1 oraz urządzeniu 2.1. Czy jest wezwanie do setResult()
pochowania gdzieś w środku PreferenceActivity
? Albo jak inaczej można wytłumaczyć to przedwczesne wezwanie?
android
android-activity
Oddzwonienie Eugene Mayevskiego
źródło
źródło
Odpowiedzi:
Można to naprawić, zmieniając tryb uruchamiania na
singleTop
:<activity android:name=".MainActivity" android:launchMode="singleTop">
W Androidzie jest błąd / funkcja (?), Która natychmiast zgłasza wynik (który nie został jeszcze ustawiony) dla
Activity
, zadeklarowany jakosingleTask
(pomimo tego, że aktywność nadal działa). Jeśli zmienimylaunchMode
aktywność rodzica zsingleTask
nasingleTop
, wszystko działa zgodnie z oczekiwaniami - wynik jest raportowany dopiero po zakończeniu czynności. Chociaż to zachowanie ma pewne wyjaśnienie (singleTask
może istnieć tylko jedna czynność i może się zdarzyć wielu kelnerów), nadal jest to dla mnie nielogiczne ograniczenie.źródło
Rozwiązałem problem po usunięciu
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
przed zadzwonieniemfragment.startActivityForResult(intent, 0);
.źródło
Właśnie usunąłem wszystkie moje niestandardowe „android: launchMode” z mojej aktywności i wszystko działało jak marzenie. Nie jest dobrym pomysłem zmienianie tego, gdy nie wiesz DOKŁADNIE, co rozumie Android ... Android jest pod tym względem trochę skomplikowany.
źródło
Zdarzyło mi się to, gdy intencja miała
Intent.FLAG_RECEIVER_FOREGROUND
ustawioną flagę.(Tak, ta flaga nie jest związana z aktywnością, ale miałem ją we wszystkich moich intencjach jako część strzelby rozwiązania innego problemu .)
źródło
Ponownie, jak w komentarzu Mayry,
setResult()
nie ma nic wspólnego z twoim problemem. z jakiegoś powoduMyConfigure
klasa kończy się sama, a kiedy to się dzieje,PreferenceActivity
po prostu zakłada, że może to być wynikMyConfigure
ponieważ tak właśnie napisałeś kod.Dzieje się tak również wtedy, gdy wymuszasz cofnięcie jakiejkolwiek czynności, która została rozpoczęta
startActivityForResult()
...Więc myślę, że lepiej skupić się na tym, dlaczego twoja
MyConfigure
klasa jest skończona na siłę.źródło