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!

È stato utile?

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().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top