2010-11-18 4 views
3

Anwendungsfall: Aktivität A ist Hauptaktivität. Während Aktivität B ist SearcActivity (SearchManager). Aktivität B ist ListActivity. Ergebnis wird in der Liste angezeigt. Sobald der Benutzer auf die Liste klickt, möchte ich den ausgewählten Listeneintrag abrufen, der an ActivityA zurückgegeben werden soll.Ergebnis von SearchManager-Aktivität zur Hauptaktivität in Android

Was habe ich getan? Ich könnte SearchActivity auf Knopf mit "onSearchRequested()" aufrufen. In ActivityB zeige ich das Suchergebnis über "setListAdapter (adapter)" an. Mit "onListItemClick" kann ich herausfinden, welche Option in der Liste vom Benutzer ausgewählt wurde.

Jetzt habe ich versucht,

Intent intent = new Intent(); 
Bundle bundle = new Bundle(); 
bundle.putString("item", l.getItemAtPosition(position).toString()); 
intent.putExtras(bundle); 
setResult(RESULT_OK, getIntent()); 
finish(); 

Und in ACTIVITYA durch folgenden Code Ergebnis zurück an ACTIVITYA senden, habe ich versucht, das Ergebnis in "onActivityResult" zu lesen.

Bundle bundle = data.getExtras(); 
String strItem = bundle.getString("item"); 
AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
alertDialog.setTitle("Item Selected"); 
alertDialog.setMessage("Item = " + strItem); 
alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface dialog, int which) { 
    return; 
} 
}); 
alertDialog.show(); 

Problem: Ich bemerkte, dass, sobald Aktivität A wieder aufgenommen wird, "onActivityResult" wird nicht aufgerufen. Daher sehe ich keinen Dialog. Außerdem kann ich nicht überprüfen, ob SearchActivity tatsächlich etwas an ActivityA sendet.

Also Freunde, wie kann ich die von ActivityB gesendeten Daten erfassen.

Antwort

1

Bist du es wahrscheinlich schreiben wollte:

setResult(RESULT_OK, intent); 

statt

setResult(RESULT_OK, getIntent()); 

den Funktionsaufruf zu sehen?

2

Ich denke, das ist ein Duplikat zu How to handle callback from Search Manager?.

Mario Lenci hat recht, dass Ihre Aktivität B nicht mit startActivityForResult gestartet wurde, wenn Sie onSearchRequested() aufrufen.

Siehe my answer to that question here. Im Wesentlichen können Sie stattdessen Aktivität A zu Ihrer durchsuchbaren Aktivität machen, um die Abfrage abzurufen, und Aktivität B manuell für ein Ergebnis starten.