今天在做项目的时候遇到一个需求,需要设置一个电话号码,并保存起来。理所当然地想到了SharedPreference,在UI上需要显示一行电话号码,点击后弹出电话号码的编辑框,编辑后保存,然后编辑框关闭,当前页面的号码要刷新为编辑后的号码。查阅了下doc,发现 Android.preference.EditTextPreference能满足我的需要,即用之。 一开始代码如下: Java代码 public class CusSerSetting extends PreferenceActivity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setPreferenceScreen(createPreferenceHierarchy()); } private PreferenceScreen createPreferenceHierarchy() { // Root PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this); // Dialog based preferences PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this); dialogBasedPrefCat.setTitle(R.string.tel); root.addPreference(dialogBasedPrefCat); // Edit text preference final EditTextPreference editTextPref = new EditTextPreference(this); editTextPref.setDialogTitle(R.string.tel); editTextPref.setKey("SEYA_KEY"); editTextPref.setTitle(R.string.tel); //get saved tel number and set it to current text view. editTextPref.setSummary(editTextPref.getText()); dialogBasedPrefCat.addPreference(editTextPref); editTextPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { editTextPref.setSummary(newValue.toString()); return true; } } ); return root; } } public class CusSerSetting extends PreferenceActivity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setPreferenceScreen(createPreferenceHierarchy()); } private PreferenceScreen createPreferenceHierarchy() { // Root PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this); // Dialog based preferences PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this); dialogBasedPrefCat.setTitle(R.string.tel); root.addPreference(dialogBasedPrefCat); // Edit text preference final EditTextPreference editTextPref = new EditTextPreference(this); editTextPref.setDialogTitle(R.string.tel); editTextPref.setKey("SEYA_KEY"); editTextPref.setTitle(R.string.tel); //get saved tel number and set it to current text view. editTextPref.setSummary(editTextPref.getText()); dialogBasedPrefCat.addPreference(editTextPref); editTextPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { editTextPref.setSummary(newValue.toString()); return true; } } ); return root; } } 实际运行时却发现进入该页面的时候取不到之前存储的号码,但在弹出框里面却能够显示之前存储的号码。经过几次三番的调试,发现是取值时间的问题,把editTextPref.setSummary(editTextPref.getText()); 放在dialogBasedPrefCat.addPreference(editTextPref);之后调用就好了。感觉是在 addPreference(...)之后editTextPref才获取到text的值的。正好手边有android SDK的源码,便分析了以下。分析后发现的确如此。 |
|