지난 번에 답변을 얻지 못했지만이 질문을 다시 게시하고 있습니다. 아직 문제가 해결되지 않았습니다.Android : SharedPreferences가 PreferenceFragment에서 업데이트되지 않음
나는 런타임 중에 많은 CheckBoxPreferences를 만드는 PreferenceScreen이있는 설정 메뉴가 있습니다 (이를 "제외 목록"선 스크린에 추가). 내 PreferenceFragment의에서 onCreate 방법의 체크 박스를 생성하고 "제외 목록"PreferenceScreen에 추가
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen
android:key="exclusion_list_key"
android:title="Exclusion List"
android:persistent="true"
android:summary="" >
</PreferenceScreen>
</PreferenceScreen>
하고 잘 작동 :로 시작하는 아래에 내가 그들에게 문제를 만들어, 여기에 XML 코드입니다.
"제외 목록"의 요약을 체크 표시가있는 모든 체크 박스 제목의 목록으로 설정하려고합니다 (확인란이 선택되어 있으면 해당 이름이 " 제외 목록 "참조).
onCreate() 메서드에서 요약을 제대로 설정하면 문제가 없습니다.
그러나 onPreferenceChanged() 메서드에서 "기본 설정"문자열 (올바른 값 포함)에 "제외 목록"요약을 설정했지만 업데이트하지 않았습니다! 내 체크 박스 메뉴에서 뒤로 누르면 "제외 목록"에 업데이트 된 값이 없습니다.
마지막 몇 줄이 관심의 대상입니다. ,
청취자가 잘 작동 내 요약 var에 setSummary (요약)를 호출 한 후
- 예상 무슨 포함
예상 때 실행되는 getSummary을 : 무슨 일인지보고 일부 printlns했다()는 예상 값을 반환합니다 (적절하게 설정되었음을 의미합니다).
그러나 실제로는 제외하고 "제외 목록"을 볼 때 요약 내용이 실제로 업데이트되지 않습니다!
내가 무엇을 놓쳤습니까? 미리 감사드립니다!
참조의 모든 코드 :
public class Settings extends AppCompatActivity {
public static final String EXC_LIST_KEY = "exclusion_list_key";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
String summary = "";
//Create all the checkboxes inside of the PreferenceScreen
for (int i = 0; i < MainActivity.contactNames.length; i++) {
CheckBoxPreference checkbox = new CheckBoxPreference(getActivity());
checkbox.setTitle(MainActivity.contactNames[i][0]);
checkbox.setKey(MainActivity.contactNames[i][2]);
checkbox.setSummary(MainActivity.contactNames[i][1]);
checkbox.setDefaultValue(false);
((PreferenceScreen) findPreference(EXC_LIST_KEY)).addPreference(checkbox);
if (checkbox.isChecked()) {
summary = summary + checkbox.getTitle() + "\n";
}
}
findPreference(EXC_LIST_KEY).setSummary(summary);
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
//Checkbox keys all start with 'key_'
if (key.startsWith("key_")) {
String summary = "";
for (int i = 0; i < MainActivity.contactNames.length; i++) {
CheckBoxPreference checkbox = (CheckBoxPreference) findPreference(MainActivity.contactNames[i][2]);
if (checkbox.isChecked()) {
summary = summary + checkbox.getTitle() + "\n";
}
}
System.out.println("Summary I have: " + summary); //Correct summary is printed out
findPreference(EXC_LIST_KEY).setSummary(summary); //Isn't updating the value???
System.out.println("Summary system has: " + findPreference(EXC_LIST_KEY).getSummary()); //Correct summary is printed out
}
}
}
}
이것은 작동하지 않았습니다. – user1429039