it-swarm.com.de

Android: Erfassen der Rückkehr einer Aktivität

Ich habe eine Frage zum Starten neuer Aktivitäten. Es läuft darauf hinaus. Ich habe 3 Registerkarten auf einer Ansicht

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

Voraussetzung ist, dass die Anwendung im Hochformat ausgeführt wird.

Alle 3 Registerkarten funktionieren wie erwartet mit Ausnahme der Kamera-Vorschau-Oberfläche (B). Es ist um 90 Grad gedreht. Die einzige Möglichkeit, dies zu korrigieren, besteht darin, die App auf Querformat zu stellen, wodurch alle meine Tabs verschoben werden und dies praktisch nicht funktioniert.

Meine Lösung lautet: Ersetzen

meine Kameraaktivität mit einer regelmäßigen Aktivität, die mit Ausnahme von leer ist

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

Dadurch wird meine CameraActivity gestartet. Und das funktioniert gut. Ich musste ein lineares Layout erstellen und 3 Bilder einfügen, die wie echte Registerkarten aussehen, damit ich versuchen kann, die Funktionsweise der Registerkarten nachzuahmen, während ich den Bildschirm in Querformat drehe und die visuellen Elemente als Hochformat behalte. 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 zu der "leeren Aktivität" in einer Registerkarte zurückkehren, in der es interpretiert werden sollte, auf die gewünschte Registerkarte in meinem Bild zu klicken.

Die Hauptsache ist, wenn es zurückkehrt, kehrt es zu einer leeren (schwarzen) Seite unter einem Tab zurück (weil es 'leer' ist). Wie kann ich das Rückgabeereignis auf der Seite erfassen, auf der die Aktivität aufgerufen wurde, und dann sehen, welche Aktion sie ausgeführt hat?

Ich kann einen Onclicklistener einrichten, in dem ich auf die gefälschten Registerkarten (Bilder) reagieren kann, auf die geklickt wird, um die Kameraaktivität zu beenden. Beim Beenden sollte die Registerkarte aktualisiert werden, sodass Sie dorthin zurückkehren. irgendwelche Vorschläge?

Vielen Dank,

81
Chrispix

Ich werde mich darauf konzentrieren, zu beantworten, wie Sie Ihren Arbeitsbereich so auflösen, dass er sich so verhält, wie Sie es möchten.

Zum Erfassen von Aktionen, die für eine Aktivität in einer anderen ausgeführt werden, sind drei Schritte erforderlich.

Starten Sie die sekundäre Aktivität (Ihre "Kameraaktivität") als Unteraktivität, indem Sie startActivityForResult anstelle von startActivity verwenden.

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 nur zu schließen, wenn ein Benutzer auf ein anderes Registerkartenbild klickt, einen neuen Intent erstellen und den Index der Registerkarte einschließen, der angezeigt wird, wenn Sie mithilfe des Extras-Bundles zur übergeordneten App zurückkehren . So leiten Sie es an den übergeordneten Anruf zurück: setResult, bevor Sie finish aufrufen, um die Kameraaktivität zu schließen.

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

Der letzte Schritt ist die aufrufende Aktivität. Überschreiben Sie onActivityResult, um auf Rückrufe von der Kameraaktivität zu warten. Holen Sie sich das Extra aus dem zurückgegebenen Intent, um den Index der Registerkarte zu bestimmen, die Sie anzeigen möchten.

@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; 
    } 
  } 
} 
158
Reto Meier