Android-Programmablaufsteuerung bei Vorhandensein von startActivityForResult-Aufruf

8

Wenn das Programm unter Android ausgeführt wird, steuert es Slave Bluetooth (BT) -Geräte. Es hat wenige Tasten, die verschiedene Funktionen der Peer-Geräte ermöglichen.

Bluetooth ist auf dem Android-Gerät standardmäßig nicht aktiviert und die Verbindung wird nach dem Klicken auf die Schaltfläche für kurze Zeit hergestellt.

Der Fluss nach jedem Klick ist also:

  1. stellen Sie sicher, dass BT aktiviert ist ( startActivityForResult() mit BT, falls nicht aktiviert)
  2. Verbindung zum entfernten Gerät herstellen
  3. Aktivieren Sie eine Funktion des Remote-Geräts
  4. Trennen Sie die Verbindung zum Gerät

Mein Problem ist, dass, wenn BT nicht aktiviert ist, ein Aufruf von startActivityForResult() in # 1 den Programmablauf "unterbricht". Später, wenn onActivityResult() aufgerufen wird, möchte ich den Fluss von dem Punkt fortsetzen, an dem er "unterbrochen" wurde.

Zu diesem Zweck habe ich ein zusätzliches Member-Feld und einige Konstanten definiert und in onActivityResult() verwendet:

%Vor%

Jetzt noch eine Komplikation: onActivityResult() wird vor onResume() der Aktivität aufgerufen. Dies ist wichtig, wenn eines der methodX() die Sichtenhierarchie ändern muss. In meinem Fall ersetzen diese Methoden einige Fragmente, und wenn diese Operation von onActivityResult() ausgeführt wird, wird eine Ausnahme ausgelöst.

Um dieses zusätzliche Problem zu lösen, migriert das hässliche switch von onActivityResult() nach onPostResume() .

Der oben beschriebene Ansatz funktioniert, aber es ist einer der hässlichsten Codeabschnitte, die ich je geschrieben habe: methodX() "registriert" sich selbst für "re-run", indem RERUN_METHOD_X constant mRerunMethodIndex , onActivityResults() zugewiesen wird setzt ein "Rerun Flag" nachdem BT aktiviert wurde, überprüft onPostResume() das Flag, löscht dieses Flag, löscht mRerunMethodIndex und führt das entsprechende methodX() erneut aus.

Gibt es einen eleganteren Ansatz (vorzugsweise auf 1 oder 2 Methoden beschränkt)?

    
Vasiliy 15.01.2015, 22:11
quelle

1 Antwort

3

Sie können Runnable verwenden, um Ihren Arbeitsablauf ohne Verwendung von Schrittkonstanten zu organisieren. Zum Beispiel:

%Vor%     
Médéric 01.06.2015 14:38
quelle