Change the summary of a ListPreference with the new value (Android)

前端 未结 14 1113
感动是毒
感动是毒 2020-12-30 03:01

How can I modify the summary of a ListPreference to the new \"Entry\" string selected by the user (not the entry value)

I suppouse its with setOnPreferenceChangeList

14条回答
  •  失恋的感觉
    2020-12-30 03:46

    Nauman Zubair is right.

    The %s implementation is buggy. The view shows the correct value on first load (if a default list value is set), but the view does not update when selecting a list item. You have to toggle a checkbox or some other preference to update the view.

    As a workaround, implement OnSharedPreferenceChangeListener to override the summary for the list preference.

    /src/apps/app_settings/SettingsActivity.java

    package apps.app_settings;
    
    import android.os.Bundle;
    import android.preference.PreferenceActivity;
    
    public class SettingsActivity extends PreferenceActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            /* set fragment */
            getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
        }
    }
    

    /src/apps/app_settings/SettingsFragment.java

    package apps.app_settings;
    
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
    import android.os.Bundle;
    import android.preference.ListPreference;
    import android.preference.Preference;
    import android.preference.PreferenceFragment;
    
    public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            /* set preferences */
            addPreferencesFromResource(R.xml.preferences);
        }
    
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            /* get preference */
            Preference preference = findPreference(key);
    
            /* update summary */
            if (key.equals("list_0")) {
                preference.setSummary(((ListPreference) preference).getEntry());
            }
        }
    
        @Override
        public void onResume() {
            super.onResume();
            getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
        }
    
        @Override
        public void onPause() {
            getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
            super.onPause();
        }
    }
    

    /res/xml/preferences.xml

    
    
      
    
    

    /res/values/strings.xml

    
    
      list 0
      
        item 0
        item 1
        item 2
      
      
        0
        1
        2
      
      0
    
    

提交回复
热议问题