我遇到問題了onSharedPreferenceChanged僅在第一次調用MultiSelectListPreference時發生更改。我打開我的設置活動並更改可以正常工作的值,並且onSharedPreferenceChanged正在調用。如果我再次打開對話框,它會顯示所選的正確條目。我選擇另一個條目並點擊確定。 onSharedPreferenceChanged現在應該被調用,但不是。如果我現在再次打開對話框,則不會選擇任何條目。我錯過了什麼,或者我做錯了什麼?onSharedPreferenceChanged不會在每次更改首選項時調用
這裏是我的preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<MultiSelectListPreference
android:key="operations"
android:title="@string/pref_operations"
android:dialogTitle="@string/pref_operations"
android:entries="@array/pref_operations_entries"
android:entryValues="@array/pref_operations_values"
android:defaultValue="@array/pref_operations_default" />
</PreferenceScreen>
而且我的設置片段
public class SettingsFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener
{
public static final String KEY_OPERATIONS_PREFERENCE = "operations";
private MultiSelectListPreference operationsPreference;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
operationsPreference = (MultiSelectListPreference) getPreferenceScreen().findPreference(KEY_OPERATIONS_PREFERENCE);
}
@Override
public void onResume()
{
super.onResume();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
Set<String> operations = operationsPreference.getValues();
String summary = "";
for (String s : operations)
summary += s + " ";
operationsPreference.setSummary(summary);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause()
{
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
if (key.equals(KEY_OPERATIONS_PREFERENCE))
{
Set<String> operations = operationsPreference.getValues();
String summary = "";
for (String s : operations)
summary += s + " ";
operationsPreference.setSummary(summary);
}
}
}
我刪除了註銷電話,但它仍然不起作用。 – CubeX2
您是否嘗試從一開始就在onSharedPreferenceChanged方法中設置一個斷點並檢查第一次被調用並且第二次未被調用? –
我做到了。它被稱爲第一次,但不是第二次。其他首選項,例如列表首選項,如果以相同方式添加,似乎也可以正常工作。 – CubeX2