Android开发--详解SharedPreference/PreferenceActivity

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               

    我们经常看到应用程序的设置页面,一般用到设置页面时,我们会继承自PreferenceActivity,它实现了SharedPreference,并生成相应的XML文件自动保存用户的设置,在设置页面中,每一个列表项都是一个Preference,如果要实现点击某一项有所反应,就需要实现OnPreferenceChangeListener接口,并使得某一个Preference绑定一个监听器,下面的截图是作者实现的一个设置界面:


实现这个界面的XML文件如下:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"><PreferenceCategory  android:title="我的设置">    <!-- 此外,还有一个控件为,ListPreference,单击该控件会弹出一个带ListView的对话框 -->    <!-- 该控件相当于CheckBox -->        <CheckBoxPreference android:key="wireless_network"            android:title="使用无线网络"            android:summary="使用无线网络查看应用程序(例如Google地图)中的位置"/>          <CheckBoxPreference android:key="gps_satellite_setting"            android:title="启用GPS卫星设置"            android:summary="定位时,精确到街道级别(取消选择可节约电量)"/></PreferenceCategory>    <PreferenceCategory  android:title="个人信息设置">         <CheckBoxPreference android:key="yesno_save_info"            android:title="是否保存个人信息"/>         <!-- 单击该控件会弹出一个带EditText的对话框 -->         <EditTextPreference android:key="individual_name"             android:title="姓名" android:summary="请输入真实姓名"/>        <!-- 这是一个子设置页面,但是如果如在代码中设置,打开后是黑色的背景,看不到内容 -->     <PreferenceScreen android:key="other_individual_msg"             android:title="其他个人信息" android:summary="是否工作,手机">              <CheckBoxPreference android:key="is_an_employee"            android:title="是否工作"/>         <EditTextPreference android:key="mobile"             android:title="手机" android:summary="请输入真实的手机号"/>     </PreferenceScreen>         </PreferenceCategory></PreferenceScreen>

其中实现相应的功能,功能的实现代码都有相应的注释:

public class SharedActivity extends PreferenceActivity implements OnPreferenceChangeListener@SuppressWarnings("deprecation"@Override /*  *在onCreate方法中需要做一下几点工作  *1.修改PreferenceActivity保存数据使用的XML文件的名称,在默认情况下,保存key-value对的XML文件是<package_name>_preferences.xml  *在本例中我将这些键值对保存才setting中  *2.设置”姓名“列表项是否可用  *3.每一个列表项就是一个Preference对象,要实现单击响应,就必须要绑定响应的监听器  */ protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  //改变PreferenceActivity保存数据使用的XML文件的名称  getPreferenceManager().setSharedPreferencesName("setting");  //不需要设置布局文件,只需要使用如下的代码装载xml文件即可  addPreferencesFromResource(R.xml.activity_shared);    Preference individualNamePreference=findPreference("individual_name");  //获得指向setting.xml文件的SharedPreference对象  SharedPreferences sharedPreferences=individualNamePreference.getSharedPreferences();  //设置姓名列表项的Summary  individualNamePreference.setSummary(sharedPreferences.getString("individual_name", "请输入真实姓名"));    Preference mobilePreference=findPreference("mobile");  SharedPreferences sharedPreferences2=mobilePreference.getSharedPreferences();  mobilePreference.setSummary(sharedPreferences2.getString("mobile", "请输入真实的手机号码"));  //设置“姓名”列表项是否可用  if(sharedPreferences.getBoolean("yesno_save_info", false)){   individualNamePreference.setEnabled(true);  }  else {   individualNamePreference.setEnabled(false);  }  individualNamePreference.setOnPreferenceChangeListener(this);  mobilePreference.setOnPreferenceChangeListener(this);  /*   * 在Preference中设置使用Theme.Light主题,则打开Preference为白色主题,    * 当Preference中内嵌有其他PreferenceScreen的时候,    * 打开内嵌的PreferenceScreen则屏幕背景为黑色的.   * 下面的这个方法实现的是:   * 在打开内嵌PreferenceScreen的时候设置其背景色.   */  PreferenceScreen s= (PreferenceScreen) findPreference("other_individual_msg");    s.setOnPreferenceClickListener(new OnPreferenceClickListener() {     @Override     public boolean onPreferenceClick(Preference preference) {      PreferenceScreen a = (PreferenceScreen) preference;      a.getDialog().getWindow().      setBackgroundDrawableResource(android.R.drawable.screen_background_light);      return false;      }     });  } @SuppressWarnings("deprecation"@Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,   Preference preference) {  if("yesno_save_info".equals(preference.getKey())){   findPreference("individual_name").setEnabled(!findPreference("individual_name").isEnabled());  }  // TODO Auto-generated method stub  return super.onPreferenceTreeClick(preferenceScreen, preference); } /*  * 必须要实现OnPreferenceChangeListener接口,该回调函数的功能是捕获列表项中的值改变后的情况  * @see android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(android.preference.Preference, java.lang.Object)  */ @Override public boolean onPreferenceChange(Preference preference, Object newValue) {  // TODO Auto-generated method stub  preference.setSummary(String.valueOf(newValue));  //一定要返回true,否则列表项的值不会改变  return true; } }


           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值