Ich beginne die Activity
(Nachkommen von PreferenceActivity
) meiner Arbeitstätigkeit wie folgt:
@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
Klasse hat keine setResult()
Anrufe. Tatsächlich hat die MyConfigure
Klasse keinen Code, außer OnCreate()
wenn sie Einstellungen mit lädt addPreferencesFromResource
.
Nun onActivityResult
wird mit rief requestCode
die 1458
vorzeitig, direkt nach MyConfigure
Tätigkeit ausgeführt wird. Getestet auf 1.6- und 2.1-Emulatoren sowie 2.1-Geräten. Gibt es einen Anruf, setResult()
irgendwo in begraben zu werden PreferenceActivity
? Oder wie sonst kann dieser vorzeitige Anruf erklärt werden?
android
android-activity
Eugene Mayevskis Rückruf
quelle
quelle
Antworten:
Dies wird behoben, indem der Startmodus auf Folgendes geändert wird
singleTop
:Es gibt einen Fehler / eine Funktion (?) In Android, für die sofort das Ergebnis (das noch nicht festgelegt wurde)
Activity
gemeldet wird, das alssingleTask
(trotz der Tatsache, dass die Aktivität weiterhin ausgeführt wird) deklariert wurde . Wenn wirlaunchMode
die übergeordnete Aktivität vonsingleTask
auf ändernsingleTop
, funktioniert alles wie erwartet - das Ergebnis wird erst nach Abschluss der Aktivität gemeldet. Obwohl dieses Verhalten eine bestimmte Erklärung hat (singleTask
es kann nur eine Aktivität existieren und es können mehrere Kellner dafür auftreten), ist dies für mich immer noch keine logische Einschränkung.quelle
Ich habe mein Problem nach dem Entfernen
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
vor dem Anruf gelöstfragment.startActivityForResult(intent, 0);
.quelle
Ich habe gerade alle meine benutzerdefinierten "android: launchMode" aus meiner Aktivität entfernt und alles hat wie ein Zauber funktioniert. Es ist keine gute Idee, dies zu ändern, wenn Sie nicht genau wissen, was Android versteht ... Android ist auf diese Weise etwas knifflig.
quelle
Dies geschah mir, als die Absicht die
Intent.FLAG_RECEIVER_FOREGROUND
Flagge gesetzt hatte.(Ja, diese Flagge ist nicht aktivitätsbezogen, aber ich hatte sie in jeder Hinsicht als Teil einer Schrotflintenlösung für ein anderes Problem .)
quelle
Wieder wie in Mayras Kommentar,
setResult()
hat nichts mit Ihrem Problem zu tun. Aus irgendeinem GrundMyConfigure
beendet sich die Klasse von selbst und wenn dies geschieht, wirdPreferenceActivity
nur davon ausgegangen, dass möglicherweise ein Ergebnis daraus resultiert,MyConfigure
da Sie den Code so geschrieben haben.Dies geschieht auch, wenn Sie Aktivitäten zurückzwingen, die mit
startActivityForResult()
...Ich denke, es ist besser, sich darauf zu konzentrieren, warum Ihre
MyConfigure
Klasse gewaltsam beendet wird.quelle