Android Preferences: How to load the default values when the user hasn't used the preferences-screen?

后端 未结 6 1177
春和景丽
春和景丽 2020-11-28 02:02

I am using a PreferenceActivity to let the user set some values. I am feeding it the xml file with the defined preferences.

I have set all the android:defaultV

6条回答
  •  感情败类
    2020-11-28 02:30

    define class extends android.preference.Preference

    public class IntegerPreference extends Preference {
        public IntegerPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    
        public IntegerPreference(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        public IntegerPreference(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public IntegerPreference(Context context) {
            super(context);
        }
    
        @Override
        protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
            super.onSetInitialValue(restorePersistedValue, defaultValue);
            persistInt((Integer) defaultValue);
        }
    
        @Override
        protected Object onGetDefaultValue(TypedArray a, int index) {
            return a.getInt(index, -1);
        }
    }
    
    public class StringSetPreference extends Preference {
        public StringSetPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    
        public StringSetPreference(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        public StringSetPreference(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public StringSetPreference(Context context) {
            super(context);
        }
    
        @Override
        protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
            super.onSetInitialValue(restorePersistedValue, defaultValue);
            persistStringSet((Set) defaultValue);
        }
    
        @Override
        protected Object onGetDefaultValue(TypedArray a, int index) {
            return Stream.of(a.getTextArray(index)).map(String::valueOf).collect(Collectors.toSet());
        }
    }
    

    define preference XML resource

    
    
        
        
        
        
        
    
    

    then initialize default value and access

        PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
    
        Map allKeys = PreferenceManager.getDefaultSharedPreferences(this).getAll();
        int iii = PreferenceManager.getDefaultSharedPreferences(this).getInt("III", -1);
        float fff = PreferenceManager.getDefaultSharedPreferences(this).getFloat("FFF", 0);
        Log.d(TAG, "allKeys=" + allKeys + " iii=" + iii + " fff=" + fff);
    

    //Logcat

    10-13 06:53:06.986 12594 12594 D MainActivity: allKeys={III=101, BBB=true, SSS=SSS, FFF=1.2, SSET=[XXX, ZZZ, YYY]} iii=101 fff=1.2
    

提交回复
热议问题