82 Stimmen

Android: Erfassen der Rückkehr einer Aktivität

Ich habe eine Frage zum Start neuer Aktivitäten. Es läuft auf Folgendes hinaus. Ich habe 3 Registerkarten in einer Ansicht

A) contains gMap activity
 B) camera activity
 C) some random text fields.

Voraussetzung ist, dass die Anwendung im Portraitmodus läuft.

Alle 3 Registerkarten funktionieren wie erwartet, mit Ausnahme der Kamera-Vorschauoberfläche (B). Sie ist um 90 Grad gedreht. Sie einzige Möglichkeit, es zu korrigieren ist, um die App im Querformat, die alle meine Registerkarten um wirft, und ist so ziemlich unbrauchbar zu setzen.

Meine Lösung ist folgende: Ersetzen

meine Kameraaktivität mit einer regulären Aktivität, die leer ist, mit Ausnahme von

Intent i = new Intent(this,CameraActivity.class);
    startActivity(i);

Damit wird meine CameraActivity gestartet. Und das funktioniert gut. Ich musste ein lineares Layout zu tun und 3 Bilder, die wie echte Registerkarten aussehen, so kann ich versuchen und imitieren den Betrieb der Registerkarten beim Drehen des Bildschirms ins Querformat und halten die Visuals als Hochformat. Der Benutzer kann auf eines der Bilder (Schaltflächen) klicken, um die nächste Registerkarte anzuzeigen. Das ist mein Problem. Es sollte meine "Kameraaktivität" beenden und zur "leeren Aktivität" in einer Registerkarte zurückkehren, wo es so interpretiert werden sollte, dass die gewünschte Registerkarte aus meinem Bild angeklickt wird.

Das Wichtigste ist, dass bei der Rückkehr eine leere (schwarze) Seite unter einer Registerkarte angezeigt wird (weil sie "leer" ist). Wie kann ich das Rücksprung-Ereignis zurück zu der Seite erfassen, die die Aktivität aufgerufen hat, und dann sehen, welche Aktion sie durchgeführt hat?

Ich kann einen onclicklistener setzen, wo ich auf die gefälschten Registerkarten (Bilder) reagieren kann, die angeklickt werden, um die Kameraaktivität zu beenden. Am Ausgang sollte die Registerkarte zu aktualisieren, so dass ist, wo Sie zurückkehren. irgendwelche Vorschläge?

Danke,

160voto

Reto Meier Punkte 95825

Ich werde mich auf die Beantwortung der Frage konzentrieren, wie Sie Ihr Arbeitsumfeld so auflösen können, dass es sich wie gewünscht verhält.

Die Erfassung von Aktionen, die für eine Aktivität innerhalb einer anderen durchgeführt werden, erfordert drei Schritte.

Starten Sie die sekundäre Aktivität (Ihre 'Kamera-Aktivität') als Unteraktivität, indem Sie startActivityForResult 代わりに startActivity .

Intent i = new Intent(this,CameraActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

Innerhalb der Unteraktivität (Kameraaktivität) müssen Sie, anstatt die Aktivität einfach zu schließen, wenn ein Benutzer auf das Bild einer anderen Registerkarte klickt, ein neues Intent erstellen und den Index der Registerkarte angeben, die angezeigt werden soll, wenn Sie mit dem Extras-Bundle zur übergeordneten Anwendung zurückkehren. Um ihn an die übergeordnete Anwendung zurückzugeben, rufen Sie setResult vor dem Aufruf finish um die Kamera zu schließen Aktivität.

resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

Der letzte Schritt ist in der aufrufenden Aktivität, überschreiben Sie onActivityResult um auf Rückrufe der Kamera Activity zu warten. Holen Sie sich das Extra aus dem zurückgegebenen Intent, um den Index der Registerkarte zu bestimmen, die Sie anzeigen sollen.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Switch tabs using the index.
      } 
      break; 
    } 
  } 
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X