2014-03-13 26 views
2

後onSharedPreferenceChanged不叫我有一個MultiSelectListPreference在我的首選項文件:MultiSelectListPreference首次

<PreferenceCategory android:title="TYPES" > 
    <MultiSelectListPreference 
     android:defaultValue="@array/empty_array" 
     android:entries="@array/types" 
     android:entryValues="@array/typeValues" 
     android:key="types" 
     android:title="Types" /> 
</PreferenceCategory> 

然後在代碼:

public class PublicPreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { 

    PublicPreferenceFragment preference = new PublicPreferenceFragment(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getFragmentManager().beginTransaction().replace(android.R.id.content, preference).commit(); 
    } 

    public class PublicPreferenceFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(final Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.publicpreferences); 

      for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { 
       initSummary(getPreferenceScreen().getPreference(i)); 
      } 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     // Set up a listener whenever a key changes 
     preference.getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     preference.getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
    } 

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     // do something 
     // this does not get called all the time for MultiSelectListPreference 
    } 
} 

找遍四周,似乎其他人有這個問題,但沒有提供解決方法。

我在這裏看到了一條評論,可能在SDK 18中存在一個錯誤,直到API 18,但無法在任何地方確認,也沒有解決方法。 Android MultiSelectListPreference uncheck does not fire SharedPreferenceChanged

那麼這是一個錯誤?有沒有解決方法?

看起來像一個很大的錯誤,所以我覺得我做錯了事情。

回答

0

我正在處理同樣的問題。從SDK 18開始,所有的東西似乎都能正常工作,但是在休息時間,我有和你一樣的問題。

我發現似乎爲我工作的解決方案:

MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference("pref_name"); 
if (multiSelectListPref != null) { 
    multiSelectListPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
     @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
      MultiSelectListPreference mpreference = (MultiSelectListPreference) preference; 
      mpreference.setSummary(newValue.toString()); 
      mpreference.setValues((Set<String>) newValue); 
      return false; 
     } 
    }); 
} 

也許這是你的情況下,也

+0

這不起作用有用。正確的解決方案在這裏http://stackoverflow.com/a/22804325/398348 – likejiujitsu