Domanda

Sono sicuro che questo sarà stato risposto, ma ho dimostrato in grado di trovarlo. Quindi, per favore scusa il mio ridondanza.

Quello che sto cercando di fare è emulare il tasto "Home", che porta indietro alla homescreen di Android. Così qui è quello che mi causa problemi:

  • Ho 3 attività di lancio. Il primo (che è collegata all'icona homescreen) è solo un'attività di configurazione (protetta da password). Non verrà utilizzato dall'utente (solo admin)
  • Uno degli altri 2 (sia accessibile tramite un widget app) è un applicazione questionario. Sto permettendo di saltare di nuovo tra le domande tramite il pulsante Indietro o un pulsante GUI schiena. Quando il questionario è finito mi riassumere le risposte date e fornire un pulsante "Fine" che dovrebbe prendere la parte posteriore utente alla schermata iniziale.

Per l'applicazione questionario io uso una sola attività (chiamato ItemActivity) che si definisce (è che la ricorsione così quando si utilizza intenti?) Per saltare da una domanda ad un altro:

Questionnaire.serializeToXML();  
Intent i = new Intent().setClass(c, ItemActivity.class);  
if(Questionnaire.instance.getCurrentItemNo() == Questionnaire.instance.getAmountOfItems()) {  
    Questionnaire.instance.setCompleted(true);  
} else Questionnaire.instance.nextItem();  
startActivity(i);

La schermata finale mostra qualcosa come "Grazie per aver partecipato", così come il pulsante precedentemente descritto, che dovrebbe prendere uno di nuovo alla homescreen. Ma io davvero non capisco come uscire dal Activity correttamente. Ho per esempio this.finish(); usato ma questo porta stranamente la schermata "Grazie" di nuovo. Così come posso solo uscire saltando indietro al homescreen ??

Ci scusiamo per l'inconvinience.
Saluti,
Steff

È stato utile?

Soluzione

Sembra che quello che sta succedendo è che hai più copie della vostra attività si aprono allo stesso tempo. Ogni volta che si avvia una nuova istanza di un'attività si sta solo aggiungendo nuovi per lo stack - tutte le vecchie attività sono ancora lì. Quando si chiama this.finish(), è solo che vi mostra la successiva attività più recente che era aperta. Io non sono sicuro perché questo è il "grazie" schermo in quanto presumibilmente che solo viene inaugurato alla fine, ma poi non seguono completamente la sequenza vostre attività vengono chiamati in.

Che cosa si può provare a fare per risolvere il problema sia: 1) utilizzare un finish() ogni volta dopo l'avvio di una nuova attività per una questione diversa (in modo che ci sia sempre e solo un'attività questione aperta alla volta), o 2) verificare se si può fare uso della bandiera CLEAR_TOP intento. Che inizia l'attività di destinazione, mentre uccidendo tutto ciò che avrebbe potuto essere sopra di esso nello stack. Per esempio, se si dispone di attività: A, B, C, C, C, C, C (ecc per ogni domanda), poi a partire A con CLEAR_TOP ucciderà fuori tutte le istanze di B e C. Si potrebbe andare bene questo nella vostra struttura del programma cambiando la prima schermata l'utente vede quando iniziano un questionario. Ciò mostrerebbe un messaggio di 'benvenuto' di default con un pulsante per avviare il questionario. Tuttavia, se è iniziato con un particolare valore in bundle con l'intento, sarebbe visualizzare il "grazie" messaggio.

Se lo fai, poi una volta che finish() attività A, l'utente verrà restituito da dove erano stati prima di iniziare la vostra applicazione -. Presumibilmente homescreen se è iniziato con un AppWidget

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top