startActivityForResult funktioniert nicht richtig mit launchMode singleInstance

Möchte ich Aktivitäten auf meinem Anwendung Activity-stack auf nur eine Instanz. Ich habe mehrere Bildschirme, die sind ListActivities und ich möchte nicht gehen durch die Schmerzen und leiden der Aktualisierung der Listen in einer früheren Instanz der ListActivity wenn eine weitere Instanz, die ListActivity ist geändert (Hinzugefügt, geändert, entfernt, etc) (oder gibt es eine einfache Möglichkeit, dies zu tun?).

Hinweis: ich habe gelesen, dass singleTop dies tun (obwohl es zerstört die Aktivität, wenn Sie die Schaltfläche " zurück), aber es funktioniert nicht. Ich habe ein Menü und wenn ich gehe auf meine Startseite, dann gehe ich zu meinem QuickList-Bildschirm, und dann gehe ich zu meinem Posteingang-Bildschirm wieder, es schafft eine neue Inbox-Aktivität.

Gerade jetzt, auf meinem ListActivities, ich habe launchMode eingestellt singleInstance. Das problem ist: Wenn ich das starten einer anderen Activity mit startActivityForResult, die onActivityResult-handler feuert sofort (bevor die neue Aktivität angelegt wird). Wenn ich führen Sie die erforderliche Aktion auf dem nächsten Bildschirm, um wieder das Ergebnis, der onActivityResult-handler nicht ausgelöst.

Was ist Los?

Hier ist, wie ich Feuer die neue Aktivität:

Intent intentLaunchQuickList = new Intent(ActivityMyList.this, ActivityQuickList.class);
startActivityForResult(intentLaunchQuickList, REQUEST_QUICKLIST);

Hier ist, wie ich das Ergebnis zurückgeben:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    QuickListItem qlItem = m_Adapter.getItem(position);
    if (qlItem != null && qlItem.getQLId() != -1) {
        Intent data = new Intent();
        data.putExtra("ql_id", qlItem.getQLId());
        if (getParent() == null) {
            setResult(Activity.RESULT_OK, data);
        }
        else {
            getParent().setResult(Activity.RESULT_OK, data);
        }
    }
    finish();
}

Hier ist mein onActivityResult-handler:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_QUICKLIST) {
        if (resultCode == Activity.RESULT_OK) {
            Bundle extras = data.getExtras();
            if (extras != null) {
                int id = extras.getInt("ql_id");
                if (id > 0) {
                    launchQLItemsThread(id);
                }
            }
        }
    }
}

InformationsquelleAutor der Frage Andrew | 2010-07-29

Schreibe einen Kommentar