5

Tengo una actividad principal y una actividad de preferencia. En mi primera actividad llamo al menú y voy a preferenciaActividad llamando a startActivityForResult.¿Cómo regresar de la pantalla de preferencias a la actividad principal?

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

Luego modifico mi configuración y deseo volver a la actividad principal y ver la actividad principal con nuevas configuraciones aplicadas. En onPause() método de hacer lo siguiente (como he entendido bien este método será llamado cuando se presiona el botón de regreso, ¿verdad?)

@Override 
    protected void onPause() { 
     super.onPause(); 
     setResult(RESULT_OK, new Intent(this, MainActivity.class)); 
     finish(); 
    } 

En actividad

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"); 
      } 
     } 
    } 

Pero mi acyncTask no llamó y registro no impreso. ¿Cómo puedo hacer esto correctamente? Gracias!

Respuesta

12

En mi primera actividad llamo al menú y voy a preferenciaActivity llamando a startActivityForResult.

El uso de startActivityForResult() con un es bastante inusual. PreferenceActivity está diseñado para ser utilizado con startActivity(). Si el que comienza en PreferenceActivity se preocupa por los cambios de preferencia, debe registrar un oyente de cambio de preferencia con el objeto SharedPreferences.

Luego modifico mi configuración y deseo volver a la actividad principal y ver actividad principal con nuevas configuraciones aplicadas.

En su lugar, le recomiendo que utilice un SharedPreferences.OnSharedPreferenceChangeListener. O simplemente vuelva a leer las preferencias que le interesan en el método de la actividad original onStart() o onResume().

En onPause() método de hacer lo siguiente (como he entendido bien este método será llamado cuando se presiona el botón de regreso, ¿verdad?)

No, eso no va a funcionar. onPause() es demasiado tarde para llamar al setResult().

+0

Gracias. Trataremos de hacer esto. –

Cuestiones relacionadas