2012-08-29 18 views
7

Sto sviluppando un'applicazione Android. Se premo un pulsante Indietro, lo stato della mia applicazione deve essere salvato. Cosa devo usare per salvare lo stato .. confuso con tutti questi onPause(), onResume() o onRestoresavedInstance() ??? quale di questi dovrei usare per salvare lo stato della mia applicazione ?? Ad esempio, quando premo il pulsante di uscita, l'intera app dovrebbe uscire, ho usato finish()?salva lo stato quando si preme il pulsante Indietro

public void onCreate(Bundle savedInstanceState) 
    { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    s1=(Button)findViewById(R.id.sn1); 
    s1.setOnClickListener(this); 
    LoadPreferences(); 
    s1.setEnabled(false); 
    } 

    public void SavePreferences() 
{ 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean("state", s1.isEnabled()); 
     } 
public void LoadPreferences() 
{ 
    System.out.println("LoadPrefe"); 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     Boolean state = sharedPreferences.getBoolean("state", false); 
     s1.setEnabled(state); 
     } 
@Override 
public void onBackPressed() 
{ 
    System.out.println("backbutton"); 
    SavePreferences(); 
    super.onBackPressed(); 
} 
+0

Se l'attività si sta chiudendo, utilizzare OnDestroy() – Aviral

+0

Che tipo di stato dell'applicazione che si desidera salvare? alcuni valori di textbox o list? – VendettaDroid

+0

È possibile salvare i valori per la casella di testo o altri importanti file utente con l'aiuto di sharedpreferences. In questo modo, anche se l'applicazione termina o si distrugge, è possibile leggere i valori salvati da sharedpreferences. – VendettaDroid

risposta

8

Quello che devi fare è, invece di usare KeyCode posteriore, si ha l'override del metodo seguito nella vostra attività,

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
} 

E salvare lo stato del pulsante utilizzando SharedPrefrence, e la prossima volta, quando inserisci la tua attività ottieni il valore dal Sharedpreference e imposta di conseguenza lo stato abilitato del tuo pulsante.

Esempio,

private void SavePreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putBoolean("state", button.isEnabled()); 
    editor.commit(); // I missed to save the data to preference here,. 
    } 

    private void LoadPreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    Boolean state = sharedPreferences.getBoolean("state", false); 
    button.setEnabled(state); 
    } 

    @Override 
public void onBackPressed() { 
    SavePreferences(); 
    super.onBackPressed(); 
} 

onCreate(Bundle savedInstanceState) 
{ 
    //just a rough sketch of where you should load the data 
    LoadPreferences(); 
} 
+0

Ho capito il codice. Questa è la mia applicazione signore, dove l'utente seleziona una destinazione tramite google map. L'applicazione traccia la posizione attuale dell'utente e quando l'utente raggiunge la desinazione l'allarme è snoozed. Quindi devo salvare lo stato del mio pulsante, il GPS deve essere eseguito in background, il tono di allarme selezionato dall'utente deve essere salvato, lo stato del pulsante snooze deve essere abilitato. Quindi, come hai detto, devo definire SavePreferences e LoadPreferences per tutti i pulsanti che uso ???? – Sindu

+0

sì, è possibile salvare tutti i tipi di dati primitivi utilizzando Preferenze condivise. Modifica il codice sopra riportato in base alle tue esigenze e dovresti essere a posto. Ottieni tutti gli stati del pulsante e salvalo con un valore chiave diverso. anche mantenere il nome del tono usando la chiave di stringa e usarlo quando torni. –

+0

posso usare onPause o onResume in modo che la mia istanza venga salvata al posto di questa SharedPreferences? – Sindu

3

è possibile utilizzare in questo modo

public void onBackPressed() { 
    // Save settings here 
}; 

Chiamato quando l'attività ha rilevato stampa dell'utente del tasto indietro. L'implementazione predefinita termina semplicemente l'attività corrente, ma puoi ignorarla per fare ciò che vuoi.

salvare lo stato dell'applicazione in questo metodo.

Problemi correlati