Android之PreferenceActivity和SharedPreferneces
来源:互联网 发布:梦三国若邪淘宝 编辑:程序博客网 时间:2024/06/04 21:04
Android之PreferenceActivity和SharedPreferneces
1.SharedPreferneces
android.content.SharedPreferences接口,用来获取和修改数据。有三种获取系统中保存的持久化数据的方式:
1). public SharedPreferences getPreferences (int mode):通过Activity对象获取,获取的是本Activity私有的Preference,保存在系统中的xml形式的文件的名称为这个Activity的名字,因此一个Activity只能有一个,属于这个Activity。
2). public SharedPreferences getSharedPreferences (String name, int mode):因为Activity继承了ContextWrapper,因此也是通过Activity对象获取,但是属于整个应用程序,可以有多个,以第一参数“name”为文件名保存在系统中。
3). public static SharedPreferences getDefaultSharedPreferences (Context context):PreferenceManager的静态函数,保存PreferenceActivity中的设置,属于整个应用程序,只有一个,Android会根据包名和PreferenceActivity的布局文件来起一个名字保存。
通过以上方式取得SharedPreferences后就可以对数据进行读取或者保存了。
String STORE_NAME = "Settings";
SharedPreferences settings = getSharedPreferences(STORE_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("sourceType", 0);
editor.commit();
获得SharedPreferences,如果需要进行保存等修改操作,首先得通过其edit()方法获得SharedPreferences.Editor,然后就可以通过putInt、putString等方法以键值对(key-value)的方式保存数据,或者remove移除某个键(key),及调用clear方法删除所有内容。最后需要调用commit方法是使修改生效。读取可以通过getInt、getString等方法获取对应键(key)保存着的数据,如果没有找到key,则返回第二个参数作为默认值。
2、PreferencesActivity
PreferencesActivity是Android中专门用来实现程序设置界面及参数存储的一个Activity。
它并不像普通的Activity那样用layout来做自己的界面,它是用专属的xml/preference.xml来构建自己的界面,然后在类中加入此xml。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="First Category"> <ListPreference android:key="list_key" android:defaultValue="list key default value" android:title="list title" android:summary="list_summary" android:entries="@array/list_preference" android:entryValues="@array/list_preference" android:dialogTitle="list_dialog_title" /> </PreferenceCategory> <PreferenceCategory android:title="Second Category"> <EditTextPreference android:key="edittext_key" android:defaultValue="edit default value" android:summary="edit summary" android:title="edit title" /> <CheckBoxPreference android:key="checkbox_key" android:defaultValue="checkbox default value" android:summary="checkbox summary" android:title="checkbox title" /> <EditTextPreference android:key="num_key" android:defaultValue="0" android:summary="edit summary" android:numeric="integer" android:title="input number" /> </PreferenceCategory></PreferenceScreen>
三项preference分成两组(PreferenceCategory),First Category和Second Category.
每一个Preference中的都会包含一个key(android:key),它的功能相当于普通layout中的id。
title:这一项的标题,字体比较大。
summary:摘要,标题下面的文字,字体较小。
defaultValue:为设置summary之前的默认值。
其中数组list_preference在array.xml中定义:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="list_preference"> <item>Red</item> <item>Blue</item> <item>Green</item> </string-array> </resources>
Setting中是怎样加入这些UI信息呢?
public class Setting extends PreferenceActivity <span style="margin: 0px; padding: 0px; border: none; font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;"> </span><span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); font-weight: bold; font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;">implements</span><span style="margin: 0px; padding: 0px; border: none; font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;"> OnSharedPreferenceChangeListener</span>{ private EditTextPreference mEtPreference; private ListPreference mListPreference; private CheckBoxPreference mCheckPreference; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); initPreferences(); } private void initPreferences() { mEtPreference = (EditTextPreference)findPreference(Consts.EDIT_KEY); mListPreference = (ListPreference)findPreference(Consts.LIST_KEY); mCheckPreference = (CheckBoxPreference)findPreference(Consts.CHECKOUT_KEY); }
我们设置了自己的偏好值,程序中如何获得呢?
@Override protected void onResume() { super.onResume(); // Setup the initial values SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences(); mListPreference.setSummary(sharedPreferences.getString(Consts.LIST_KEY, "")); mEtPreference.setSummary(sharedPreferences.getString(Consts.EDIT_KEY, "linc")); // Set up a listener whenever a key changes sharedPreferences.registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals(Consts.EDIT_KEY)) { mEtPreference.setSummary( sharedPreferences.getString(key, "20")); } else if(key.equals(Consts.LIST_KEY)) { mListPreference.setSummary(sharedPreferences.getString(key, "")); } }
那么,在其他Activity中如何获得设置的值呢?也是用sharedPreference来实现呢?
private void showSettingInfo() { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); settings.getBoolean(Consts.CHECKOUT_KEY, false); settings.getString(Consts.EDIT_KEY, ""); settings.getString(Consts.LIST_KEY, "linc"); }
引用:
http://blog.csdn.net/lincyang/article/details/20609673
http://blog.csdn.net/joebaby_/article/details/7971823
- Android之PreferenceActivity和SharedPreferneces
- SharedPreferneces
- Android之PreferenceActivity 详解
- Android之PreferenceActivity
- Android之PreferenceActivity
- Android之PreferenceActivity 详解
- Android之PreferenceActivity
- 转-Android之PreferenceActivity
- Android之PreferenceActivity
- Android开发之PreferenceActivity
- Android开发之PreferenceActivity .
- Android之PreferenceActivity
- Android之PreferenceActivity
- Android之PreferenceActivity
- Android之PreferenceActivity
- Android之PreferenceActivity
- Android之PreferenceActivity
- Android之PreferenceActivity
- 装饰者模式
- svn数据库自动备份脚本
- windows下vs2012使用C++访问redis
- 音视频相关研究-英年早逝的雷宵骅在读博士的项目
- Storm学习----Metrics
- Android之PreferenceActivity和SharedPreferneces
- 链接测试工具小汇
- POJ 2752 KMP 待AC
- OJ----字符串相似程度*
- 解决Maven报Plugin execution not covered by lifecycle configuration
- Matlab 归一化(normalization)/标准化 (standarization)
- sts打可执行jar的问题
- saltStack运维工具的部署及master迁移实现的过程详解
- trace the expdp log(跟踪EXPDP日志)