2014年7月1日火曜日

Android : PreferenceFragment で Preference の変更内容を summary に反映させる

参考 : Android Preference の summary を動的に変更

SharedPreferences.OnSharedPreferenceChangeListener で Preference の変更を検知し、
そこで渡された key から、 findPreference(key) で Preference を、
sharedPreferences.getXXX(key, default_value) から値を取得する。
setSummary(summary) などで表示を更新する。
public class SettingFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener{

    public SettingFragment() {
        
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.setting);
    }

    @Override
    public void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

        Preference p = findPreference("TEST_PREFERENCE_STRING_KEY");
        String value = PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("TEST_PREFERENCE_STRING_KEY", "default_value");
        p.setSummary(value);
    }

    @Override
    public void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Log.i("onSharedPreferenceChanged", key);
        if(key.equals("TEST_PREFERENCE_STRING_KEY")){
            Preference p = findPreference(key);
            String value = sharedPreferences.getString(key, "default_value");
            p.setSummary(value);
        }
    }
}

1 件のコメント: