5

Ho un'attività principale e una preferenzaAttività. Alla mia prima attività chiamo menu e vado su preferenceActivity chiamando startActivityForResult.Come tornare dalla schermata delle preferenze all'attività principale?

   case R.id.settings: 
       startActivityForResult(new Intent(this, SettingsActivity.class), LAUNCH_SETTINGS); 
       return true; 

Quindi cambio le mie impostazioni e voglio tornare all'attività principale e vedere l'attività principale con le nuove impostazioni applicate. 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(); 
    } 

Su attività principale

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 il mio acyncTask non chiamato e log non stampato. Quanto correttamente posso fare questo? Grazie!

risposta

12

Nella mia prima attività chiamo menu e vado su preferenceActivity chiamando startActivityForResult.

Utilizzare startActivityForResult() con un PreferenceActivity è piuttosto insolito. PreferenceActivity è progettato per essere utilizzato con startActivity(). Se quello che inizia con PreferenceActivity si preoccupa delle modifiche alle preferenze, dovrebbe registrare un listener di modifiche delle preferenze con l'oggetto SharedPreferences.

Quindi cambio le impostazioni e voglio tornare all'attività principale e vedere l'attività principale con le nuove impostazioni applicate.

Si consiglia di utilizzare un SharedPreferences.OnSharedPreferenceChangeListener invece. Oppure, rileggi semplicemente le preferenze che ti interessano nel metodo onStart() o onResume() dell'attività originale.

In onPause() il metodo do seguente (come ho diritto di capire questo metodo verrà chiamato quando si preme il tasto indietro, giusto?)

No, che non funziona. onPause() è troppo tardi per chiamare setResult().

+0

Grazie. Cercherò di farlo. –