2012-01-02 2 views
2

I 해요 안드로이드 ICS SDK를 사용하고 난 API 레벨에 대한 avalaible MultiSelectListPreference를 (사용하십시오 PreferenceScreen을하고 싶은 11 & +.사용 MultiSelectListPreference OFR 안드로이드 PreferenceScreen

난 그냥 SharedPref의 값을 유지하려면, 새로 고침 MultiSelectListPreference의 요약 및 대화 목록을 새로 고치 여기

내 코드입니다 :.

Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.newgame); 
    mMultiCharacters.setOnPreferenceChangeListener(this); 
} 

@Override 
public boolean onPreferenceChange(Preference preference, Object newValue) { 

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor settingsEditor = settings.edit(); 
    settingsEditor.putStringSet(preference.getKey() , (Set<String>) newValue); 
    settingsEditor.commit(); 
    //display new summary 
    initChar(); 
    return false; 
} 

XML 부분 :

<MultiSelectListPreference 
     android:entries="@array/characterNames" 
     android:entryValues="@array/characterNames" 
     android:key="pref_characters" 
     android:persistent="true" 
     android:title="Chars :" /> 

동작이 이상합니다. 대화 상자 목록이 새로 고쳐지지 않습니다 ... 몇 가지 아이디어가 있습니까? 감사!

답변

2

음 .. 난 한때 MultiSelectListPreference을 사용하고, 여기에 내가 "생각하는"것입니다 ..

당신은 내가뿐만 아니라 변경 내용을 커밋하지 않습니다 생각 onPreferenceChange 리스너에 false을 반환하는뿐만 아니라, 이전 값으로 되돌릴 수 있습니다. settingsEditor을 통해 변경 사항을 커밋하고 있음을 알고 있지만 false 반환이 이전 값을 되 돌리는 것이므로 사실을 반환하는 것이 좋습니다.

다시 한 번, newValue 개체는 실제로 새로 선택된 값을 포함하므로 실제로 원하는대로 수행 할 수 있지만 true를 반환하면 변경 내용을 커밋하는 데 사용할 필요가 없습니다. 행운을 비네.

관련 문제