Android之PreferenceActivity和SharedPreferneces

Android之PreferenceActivity和SharedPreferneces

1.SharedPreferneces

SharedPreferneces 是Android四大存储方式之一,以键值对的形式存储在xml文件里面,支持Boolean、Int、Float、Long、String等基本类型。

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值