8

Nella mia app, alcune impostazioni possono eventualmente essere modificati mentre il PreferenceActivity non è aperto, e un problema che sto funzionando in è che addPreferencesFromResource è chiamato a onCreate, così dicono, apro la PreferenceActivity, poi vai da un'altra schermata, poi fai qualcosa che cambia le impostazioni, quindi premi il tasto indietro per tornare allo PreferenceActivity, quindi alcune impostazioni non sono cambiate sul layout.Preferenze Ricarica in PreferenceActivity su Riprendi

Quindi, come è possibile ricaricare tutto il Preferences ogni volta che viene chiamato onResume (o onStart()) senza duplicare il layout?

risposta

3

modifica: questa soluzione funzionerà solo per API 11 +.

Non sono sicuro di aver compreso appieno il problema, ma è possibile aggiungere una chiamata per ricreare() nel risultato dell'attività che dalla mia comprensione ha l'attività di nuovo attraverso l'intero ciclo di vita.

Per assicurarsi di farlo solo quando in realtà ci sono dati sporchi, imposterei un flag in SharedPreferences che consente alla tua attività di sapere in onResume() che deve essere ricreato.

public void onResume(){ 
      super.onResume(); 
      SharedPreferences pref = getApplicationContext().getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE); 
      if(pref.getBoolean("isDirtyPrefs", true)) 
       recreate(); 
     } 
+0

Grazie. Non l'ho ancora provato, ma sembra che funzionerà. Non ero a conoscenza del comando recreate() che avevo cercato in PreferenceActivity e PreferenceManager. Ma grazie, perché è esattamente quello che volevo. – Jakar

+4

ricreate è API lvl 11 – Blundell

+0

Si consiglia di testare la logica in quanto potrebbe ripetersi e ricominciare da quando onResume verrà chiamato nel ciclo di vita e se lo sviluppatore non imposta la preferenza o no, predefinito su true e loop. –

1

Ho avuto un problema simile. Non riuscendo a trovare un modo semplice per rendere la mia PreferenceActivity stesso aggiornamento, la mia soluzione era quella di aggiungere questo al mio PreferenceActivity:

/** 
* Called when activity leaves the foreground 
*/ 
protected void onStop() { 
    super.onStop(); 
    finish(); 
} 

Questo farà sì che le Preferenze schermo per ricaricare da SharedPreferences prossima volta che viene avviato. Inutile dire che questo approccio non funzionerà se si vuole essere in grado di tornare alla schermata delle preferenze usando il pulsante Indietro.

+0

L'ho preso in considerazione, ma il mio 'PreferenceActivity' avvia altre attività, e sarebbe stato troppo complicato sovrascrivere' onKeyDown' e 'onKeyUp' in quelle attività per avviare nuovamente il' PreferenceActivity'. Grazie per il suggerimento, però. – Jakar

Problemi correlati