今天在做項(xiàng)目的時(shí)候遇到一個(gè)需求,需要設(shè)置一個(gè)電話號(hào)碼,并保存起來(lái)。理所當(dāng)然地想到了SharedPreference,在UI上需要顯示一行電話號(hào)碼,點(diǎn)擊后彈出電話號(hào)碼的編輯框,編輯后保存,然后編輯框關(guān)閉,當(dāng)前頁(yè)面的號(hào)碼要刷新為編輯后的號(hào)碼。查閱了下doc,發(fā)現(xiàn) Android.preference.EditTextPreference能滿足我的需要,即用之。 一開(kāi)始代碼如下: 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; } } 實(shí)際運(yùn)行時(shí)卻發(fā)現(xiàn)進(jìn)入該頁(yè)面的時(shí)候取不到之前存儲(chǔ)的號(hào)碼,但在彈出框里面卻能夠顯示之前存儲(chǔ)的號(hào)碼。經(jīng)過(guò)幾次三番的調(diào)試,發(fā)現(xiàn)是取值時(shí)間的問(wèn)題,把editTextPref.setSummary(editTextPref.getText()); 放在dialogBasedPrefCat.addPreference(editTextPref);之后調(diào)用就好了。感覺(jué)是在 addPreference(...)之后editTextPref才獲取到text的值的。正好手邊有android SDK的源碼,便分析了以下。分析后發(fā)現(xiàn)的確如此。 |
|