SharedPreferences的使用包括两方面:

SharedPreferences的使用包括两方面:

利用SharedPreferences读取保存的配置;

利用SharedPreferences保存用户的配置。

 

有三种获取系统中保存的持久化数据的方式:

1.    public SharedPreferences getPreferences (int mode)

   通过Activity对象获取,获取的是本Activity私有的Preference,保存在系统中的xml形式的文件的名称为这个Activity的名字,因此一个Activity只能有一个,属于这个Activity

2.  因为Activity继承了ContextWrapper,因此也是通过Activity对象获取,但是属于整个应用程序,可以有多个,以第一参数的name为文件名保存在系统中。

public abstract SharedPreferences getSharedPreferences (String name, int mode)

eg.sp = getSharedPreferences ("Alarming",0);

SharedPreferences preferences;

preferences = getSharedPreferences("fileName", MODE_PRIVATE);//fimename是数据库里的文件名,eg.(Alarming.ini)

 

MODE_PRIVATE:the default mode,only be accessed by the calling application. Constant Value: 0

MODE_WORLD_READABLE:allow all other applications to have read access to the created file.Constant Value: 1

MODE_WORLD_WRITEABLE: allow all other applications to have write access to the created file.Constant Value: 2

 

//如果modle值为空,则系统默认返回‘你好’。 

preferences.getString("modle", "你好"); 

SharedPreferences.Editor editor = preferences.edit();  

        //保存组件中的值  

        editor.putString("modle", "value");  

        //提交保存的结果  

        editor.commit(); 

3PreferenceManager的静态函数,保存PreferenceActivity中的设置,属于整个应用程序,但是只有一个,Android会根据包名和PreferenceActivity的布局文件来起一个名字保存

SharedPreferences mPerferences = PreferenceManager.getDefaultSharedPreferences(this);            

int counter = mPerferences.getInt("counter", 0);

SharedPreferences.Editor mEditor = mPerferences.edit();       

mEditor.putInt("counter", ++counter);

mEditor.commit();

 

查看Preferences文件,首先打开命令终端:adb shell一下,然后cd data/data进入该目录,ls一下我们会发现一大堆包文件,入下图所示:

cd com.android.tutor (这里是我程序的包名) /shared_prefs,ls一下会发现.xml文件如下图:

打开.xml文件,格式如下(为什么这样大家自己去理解):

view plaincopy to clipboardprint?

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>  

<map>  

<int name="counter" value="3" />  

</map> 

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>

<map>

<int name="counter" value="3" />

</map>

 

 

DialogPreference这个对话框中包含一个ok,一个cancel的按钮,点击ok时,会调用

onDismiss函数。//This method will be invoked when the dialog is dismissed.

onDialogClosed(boolean positiveResult)函数的内容为空,即不做任何事情
EditTextPreference
继承于DialogPreference

protected void onDialogClosed (boolean positiveResult)

Called when the dialog is dismissed and should be used to save data to the SharedPreferences

positiveResult

Whether the positive button was clicked (true), or the negative button was clicked or the dialog was canceled (false).


@Override
    protected void
onDialogClosed(boolean positiveResult) {
        super.
onDialogClosed(positiveResult);
       
        if
(positiveResult) {//是否是ok按钮点击?----------------------------------------A
           
String value = mEditText.getText().toString();//获取EditText控件的内容 -----B
            if
(callChangeListener(value)) {//应用层是否关注此值变化---------------------C
               
setText(value);//设置新的值--------------------------------------------------D
           
}
       
}
   
}
从以上可以看到,如果应用层允许保存用户设置的新值,则进行保存
其中(D)最终调用Preference类的setPersistentString()函数进行保存。

此函数可以从Preference.java的源码callChangeListener看到,看应用程序是否设置了
setOnPreferenceChangeListener,这个一般是继承的PerferenceActivity的类来调用一个listener或者自身,
如果没有没有设置 ,用户即忽略参数变化。

 

protected void onBindDialogView (View view)

Binds views in the content View of the dialog to data.

Make sure to call through to the superclass implementation.

 PreferenceActivity继承了ListActivity

 Android系统中和设置界面相关的包为android.preference

1、新建工程AndroidPreferenceDemo extends PreferenceActivity

2、新建一个xml文件夹,取名为preferences.xmlFile文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?> 

<PreferenceScreen   //管理布局

    xmlns:android="http://schemas.android.com/apk/res/android"   

android:title="Settings"> 

android:summary="settings about emotions"> 

    <CheckBoxPreference   

        android:title="Love me?"   

        android:summaryOn="Yes,I love you!" 

        android:summaryOff="No,I am sorry." 

        android:defaultValue="true"> 

    </CheckBoxPreference> 

</PreferenceScreen>

<PreferenceCategory 

        xmlns:android="http://schemas.android.com/apk/res/android" 

        android:title="Emotions" 

        android:summary="settings about emotions">//PreferenceCategory下这句不起作用, PreferenceCategory相当于PreferenceScreen没写summary的情况  

        <CheckBoxPreference    

            android:title="Love me?"   

            android:summaryOn="Yes,I love you!" 

            android:summaryOff="No,I am sorry." 

            android:defaultValue="true"> 

        </CheckBoxPreference>

</PreferenceCategory>   

3java文件中的setContentView(R.layout.main);改为

addPreferencesFromResource(R.xml.preferences);

PreferenceCategory是把包含的内容归为同一类,但只是显示在一个页面中。

OnPreferenceChangeListener

addPreferencesFromResource(R.xml.preferencesii);

updateFrequencyKey=getResources().getString(R.string.auto_update_frequency_key);

updateFrequencyListPref=(ListPreference)findPreference(updateFrequencyKey);

updateFrequencyListPref.setOnPreferenceChangeListener(this);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值