打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android EditTextPreference 小记

今天在做项目的时候遇到一个需求,需要设置一个电话号码,并保存起来。理所当然地想到了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的源码,便分析了以下。分析后发现的确如此。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
android PreferenceScreen使用笔记
PreferenceActivity用法简介
Android的配置界面PreferenceActivity
android Preference之android:dependency
16天记住7000考研词汇:第5天
PNAS:微生物的自然决策方式值得学习!- 生物研究-生物谷
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服