Android : SettingsActivity

[zurück]

Beschreibung

Diese SettingsActivity ist in der Lage einen Platzhalter (%s) im Summarytext durch den aktuellen Wert zu setzen. Zum Beispiel:

android:summary="%s zu Spielbeginn"

Der Platzhalter %s wird automatisch durch den aktuellen Wert der Einstellung ersetzt.

Quelltext

  1. package lippo.scriptorcolossei.settings;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6.  
  7. import lippo.scriptorcolossei.R;
  8. import android.content.SharedPreferences;
  9. import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
  10. import android.os.Bundle;
  11. import android.preference.Preference;
  12. import android.preference.PreferenceActivity;
  13. import android.preference.PreferenceGroup;
  14. import android.preference.PreferenceScreen;
  15.  
  16. public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener
  17. {
  18.     private SharedPreferences               sharedPreferences;
  19.     private final Map<Preference, String>   preferenceMap   = new HashMap<Preference, String>();
  20.    
  21.     @Override
  22.     public void onCreate(Bundle savedInstanceState)
  23.     {
  24.         super.onCreate(savedInstanceState);
  25.         addPreferencesFromResource(R.xml.preferences);
  26.        
  27.         PreferenceScreen preferenceScreen = getPreferenceScreen();
  28.         sharedPreferences = preferenceScreen.getSharedPreferences();
  29.        
  30.         fillPreferenceList(preferenceScreen);
  31.     }
  32.    
  33.     @Override
  34.     protected void onResume()
  35.     {
  36.         super.onResume();
  37.         sharedPreferences.registerOnSharedPreferenceChangeListener(this);
  38.         updateSummary();
  39.     }
  40.    
  41.     @Override
  42.     protected void onPause()
  43.     {
  44.         super.onPause();
  45.         sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
  46.     }
  47.    
  48.     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
  49.     {
  50.         updateSummary();
  51.     }
  52.    
  53.     private void fillPreferenceList(PreferenceGroup preferenceGroup)
  54.     {
  55.         int preferenceCount = preferenceGroup.getPreferenceCount();
  56.         for (int preferenceIndex = 0; preferenceIndex < preferenceCount; preferenceIndex++)
  57.         {
  58.             Preference preference = preferenceGroup.getPreference(preferenceIndex);
  59.            
  60.             if (preference instanceof PreferenceGroup)
  61.             {
  62.                 fillPreferenceList((PreferenceGroup) preference);
  63.             }
  64.             else
  65.             {
  66.                 String summary = preference.getSummary().toString();
  67.                 if (summary.contains("%s"))
  68.                 {
  69.                     preferenceMap.put(preference, summary);
  70.                 }
  71.             }
  72.            
  73.         }
  74.     }
  75.    
  76.     private void updateSummary()
  77.     {
  78.         Map<String, ?> sharedPreferencesMap = sharedPreferences.getAll();
  79.        
  80.         for (Entry<Preference, String> entry : preferenceMap.entrySet())
  81.         {
  82.             Preference preference = entry.getKey();
  83.             String preferenceKey = preference.getKey();
  84.             String newSummary = String.format(entry.getValue(), sharedPreferencesMap.get(preferenceKey));
  85.             preference.setSummary(newSummary);
  86.         }
  87.     }
  88. }