2014-05-18 1 views
0

Je veux après avoir dirigé l'utilisateur vers la fenêtre de préférences "setting", avoir un indicateur implique si l'utilisateur est revenu ou non de l'activité des préférences s'il a coché un option désignée ou non.Comment gérer le statut du retour d'une activité enfant

Je sais que je peux commencer l'activité des préférences « child activity « de mon activité actuelle » Parent », en utilisant startActivity() ou startActivityForResult(). mais dans ce cas, je veux vérifier l'état du retour en arrière de la child activity

MISE À JOUR

Ou, pour être plus précis, je veux vérifier le si l'option « GPS permettent » qui se trouve dans le menu "Services de localisation" est coché ou non.

+0

dans votre onActivityResult, après vous être assuré que l'application est revenue du préf. activity, vérifiez la SharedPreference utilisée par PreferenceActivity pour voir si l'utilisateur a mis à jour la valeur en cochant la case. – rekaszeru

+0

pouvez-vous s'il vous plaît fournir quelques exemples de vérification des préférences partagées du système? –

+0

s'il vous plaît voir l'explication et les exemples dans la réponse ci-dessous sur la façon d'utiliser la préférence checkbox. – rekaszeru

Répondre

0

Supposons que vous avez un CheckboxPreference dans votre PreferenceActivity déclarée:

<CheckBoxPreference 
    android:defaultValue="false" 
    android:key="prefAutoLogin" 
    android:summary="@string/pref_autologin_summary" 
    android:title="@string/pref_autologin" /> 

Dans votre onOptionsItemSelected son activité principale, vous vérifiez que l'élément de menu a été pressé, et dans le cas du menu des paramètres, vous démarrez votre PreferenceActivity:

final Intent i = new Intent(this, MySettingActivity.class); 
startActivityForResult(i, RESULT_SETTINGS); 
// RESULT_SETTINGS is an integer constant to identify the preference activity 

Vous commencez le MySettingsActivity pour résultat, ce qui signifie l'activité en cours sera informé quand il retourne dans la méthode onActivityResult. Vous écrasez cette méthode pour vérifier les modifications:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) 
    { 
    case RESULT_SETTINGS: 
     // here you check whether the auto-login preference was checked or not: 
     final SharedPreferences prefs = PreferenceManager 
      .getDefaultSharedPreferences(this); 
     final boolean autoLoginChecked = prefs.getBoolean("prefAutoLogin", false); 
     // prefAutoLogin is the key of your CheckBoxPreference declared in the xml above. 
     if (autoLoginChecked) 
     { 
      // perform the actions necessary when the checkbox is ticked 
     } 
     else 
     { 
      // ... 
     } 
     break; 
    } 
    [...] 
    default {...} 
} 

Si vous devez effectuer certaines actions uniquement lorsque la case est cochée de faux à vrai (et non à chaque retour de l'activité pref avec un état contrôlé.), vous devez stocker son état avant le début de l'activité de préférence, et match contre le nouvel Etat sur le retour:

private boolean initiallyChecked; 

et avant de commencer l'activité de paramètres:

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
initiallyChecked = prefs.getBoolean("prefAutoLogin", false); 

Ensuite, lorsque l'activité revient en arrière, vous ne cochez pas seulement si la valeur de case à cocher est vrai, mais vérifiez pour voir si elle était fausse avant:

if (autoLoginChecked && !initiallyChecked) 
{ .... } 

Pour plus voir référence this post on viralpatel.

+0

veuillez s'il vous plaît voir la mise à jour –

+1

Avec votre mise à jour la question vient d'avoir un autre sens, s'il vous plaît voir ce fil sur la façon d'atteindre votre objectif: http://stackoverflow.com/a/7990939/506879 – rekaszeru

+0

@Elpharaoh à l'avenir s'il vous plaît éviter ces mises à jour qui changent complètement votre question. Et assurez-vous de le rechercher en premier, puisque vous avez déjà répondu à plusieurs de vos questions auparavant. – rekaszeru

Questions connexes