Come restituire dallo schermo preferenza all'attività principale?
-
30-09-2019 - |
Domanda
Ho un'attività principale e uno preferenceActivity. Sul mio menu I chiamata prima attività e proseguire preferenceActivity chiamando startSubActivity.
case R.id.settings:
startActivityForResult(new Intent(this, SettingsActivity.class), LAUNCH_SETTINGS);
return true;
Poi cambio le mie impostazioni e voglio tornare sull'attività principale e visualizzare l'attività principale con le nuove impostazioni applyed. In onPause () il metodo do seguente (come ho diritto di capire questo metodo verrà chiamato quando si preme il tasto indietro, giusto?)
@Override
protected void onPause() {
super.onPause();
setResult(RESULT_OK, new Intent(this, MainActivity.class));
finish();
}
Il principale attività
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == LAUNCH_SETTINGS) {
if (resultCode == RESULT_OK) {
new RefreshList().execute(ACTION_SELECT);
Log.d(TAG, "On activity result");
}
}
}
Ma la mia acyncTask non ha chiamato e log non stampato. Come correttamente posso fare questo? Grazie!
Soluzione
Al mio menu I chiamata prima attività e proseguire preferenceActivity chiamando startSubActivity.
Uso startActivityForResult()
con un PreferenceActivity
è piuttosto insolito. PreferenceActivity
è progettato per essere utilizzato con startActivity()
. Se quello di iniziare le cure PreferenceActivity
sui cambiamenti delle preferenze, si dovrebbe registrare un cambiamento di preferenza listener con l'oggetto SharedPreferences
.
Poi cambio le mie impostazioni e voglio tornare sull'attività principale e visualizzare l'attività principale con le nuove impostazioni applyed.
Vi consiglio di utilizzare un SharedPreferences.OnSharedPreferenceChangeListener
invece. Oppure, semplicemente ri-leggere le preferenze che ti interessano in modo onStart()
o onResume()
della attività originaria.
In onPause () metodo di fare in seguito (come ho diritto di capire questo metodo verrà chiamato quando si preme il tasto indietro, giusto?)
No, che non funziona. onPause()
è troppo tardi per chiamata setResult()
.