Domanda

Ho 3 diverse attività tra cui l'utente naviga senza un ordine particolare.Il mio obiettivo è duplice:

  1. Quando l'utente passa a qualcos'altro quando l'app viene ripresa, voglio iniziare da dove l'utente ha lasciato anche se l'app è stata terminata
  2. Quando viene ripresa l'ultima attività, voglio ripristinarla all'ultimo stato visualizzato (penso di avere una buona idea su come ottenerla)

Penso che il problema non lo sia avviare/interrompere - dove praticamente ottengo ciò di cui ho bisogno, ma onCreate() se l'app è stata terminata.In tal caso, seleziona l'attività che ho configurato nel manifest.Suppongo di poter inserire qualcosa onCreate() metodo di quell'attività predefinita ma esiste un modo migliore che forse mi manca?

È stato utile?

Soluzione

Se la tua app non è stata "terminata", la n. 1 dovrebbe già funzionare e la n. 2 richiede semplicemente il salvataggio di tutti i valori che non sono gestiti automaticamente nel bundle in onSaveInstanceState() quindi ripristinandoli onRestoreInstanceState().

Questo è una specie di hack, ma penso che la tua migliore opzione per il numero 1 nel caso in cui l'app venga effettivamente terminata sarebbe quella di salvare l'attività più recente in onResume di ciascuna delle tue classi di attività, quindi quando esegui per la prima volta onCreate di la tua prima attività fai un controllo quindi avvia l'attività corretta...forse anche inserire un'attività vuota all'inizio.Qualcosa come questo:

Inizio attività:

public class StartActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // get last open Activity
        String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
        if (last_activity == MyActivity2.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity2.class));
        } else if (last_activity == MyActivity3.getSimpleName()) {
            startActivityForResult(new Intent(this, MyActivity3.class));
        } else {
            // assume default activity
            startActivityForResult(new Intent(this, MyActivity1.class));
        }
    }

    public void onActivityResult() {
        // kill the activity if they go "back" to here
        finish();
    }
}

Quindi in tutte le altre attività (MyActivity1,2,3) salva i valori in questo modo:

@Override
public void onResume() {
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
    e.putString("last_activity", getClass().getSimpleName());
    e.commit();

    super.onResume();
}

Dovrai anche gestire manualmente il salvataggio/ripristino dei dati per ciascuna attività.Puoi salvare tutti i valori di cui hai bisogno nelle preferenze all'interno di onPause() di ciascuna delle attività, quindi ripristinarli in onResume().

Altri suggerimenti

Tieni presente che onSaveInstanceState() non è praticabile per lo stato a lungo termine, ad es.l'utente spegne il telefono e lo riaccende in un momento indeterminato successivo.Dovrai creare il tuo meccanismo statale a lungo termine se desideri che il tuo stato sopravviva ai cicli di potere.

Credo che tu voglia implementare onSaveInstanceState e questo memorizzerà lo stato attuale delle tue attività in un pacchetto.Quel pacchetto verrà passato alla tua attività in onCreate e potrai utilizzarlo per reimpostare i tuoi valori.

http://developer.android.com/guide/topics/fundamentals.html#actstate

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