上一篇讲述了PreferenceFragment中的各种控件,接下来为各个控件添加监听事件。。。。
主要实现了3个接口OnPreferenceClickListener,OnSharedPreferenceChangeListener和OnPreferenceChangeListener。
onPreferenceClick为点击事件,当点击Preference控件后将触发该方法。但是EditTextPreference等修改内容后再次确认时,不会调用该方法。为了解决这一问题,onSharedPreferenceChanged登场了。当Preference控件内容发生改变时,将触发该方法。最后onPreferenceChange方法用于MultiSelectList和Ringtone的调用。
细节就直接上代码啦,这样比较清楚。。。
public class SettingFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener, SharedPreferences.OnSharedPreferenceChangeListener,Preference.OnPreferenceChangeListener { private CheckBoxPreference checkbox; private EditTextPreference edittext; private MultiSelectListPreference MultiSelectList; private ListPreference list; private RingtonePreference Ringtone; private SwitchPreference Switch; private Preference preference; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.setting); //根据key值找到控件 checkbox = (CheckBoxPreference) findPreference("checkbox"); edittext = (EditTextPreference) findPreference("edittext"); MultiSelectList = (MultiSelectListPreference)findPreference("MultiSelectList"); list = (ListPreference)findPreference("list"); Ringtone = (RingtonePreference) findPreference("Ringtone"); Switch = (SwitchPreference) findPreference("switch"); // 设置监听器 checkbox.setOnPreferenceClickListener(this); edittext.setOnPreferenceClickListener(this); Ringtone.setOnPreferenceClickListener(this); MultiSelectList.setOnPreferenceChangeListener(this); Ringtone.setOnPreferenceChangeListener(this); // 得到我们的存储Preferences值的对象,然后对其进行相应操作 SharedPreferences shp = PreferenceManager.getDefaultSharedPreferences(this.getActivity()); boolean apply_Checked = shp.getBoolean("checkbox", false); //获取历史设置 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this.getActivity()); edittext.setSummary(sp.getString("edittext", "")); } @Override // 点击事件触发 public boolean onPreferenceClick(Preference preference) { // 对控件进行操作 if (preference == checkbox) { Toast.makeText(this.getActivity(), " 点击了checkbox :" + checkbox.isChecked(), Toast.LENGTH_SHORT).show(); } else if (preference == edittext) { edittext.setText(""); Toast.makeText(this.getActivity(), " 点击了edittext :" + edittext.getText(), Toast.LENGTH_SHORT).show(); } else if (preference == Ringtone) { Toast.makeText(this.getActivity(), " 点击了Ringtone :" + Ringtone.getRingtoneType(), Toast.LENGTH_SHORT).show(); } return true; } //当Preference发生变化时调用 @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals("edittext")) { edittext.setSummary(edittext.getText()); } if (key.equals("list")) { list.setSummary(list.getValue()); } if(key.equals("Ringtone")){ Ringtone.setSummary(Ringtone.getRingtoneType()); } if(key.equals("switch")){ Switch.setSummary(String.valueOf(Switch.isChecked())); } } @Override public void onResume() { super.onResume(); //注册事件 getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { //注销事件 getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); super.onPause(); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference == MultiSelectList) { MultiSelectList.setSummary(newValue.toString()); return true; } if (preference == Ringtone) { Ringtone.setSummary(newValue.toString()); return true; } return false; } }源码戳这里