android中SharedPreferences用法詳 – Android移動開發技術文章_手機開發 Android移動開發教學課程

 

在android應用開發中,作為配置環境的preferences,用到的地方頗多,下面我帶大傢來詳細講解下android中SharedPreferences的用法。先上圖看下配置畫面的效果吧。

上圖是preferences頁面的效果圖。

點擊設置IP地址後跳出設置對話框:

 

 

 

android 為瞭方便管理SharedPreferences,為我們提供瞭簡單快捷的PreferenceActivity類,通過繼承該類,可以實現各種漂亮的preferences UI設置界面。下面貼出preferences頁面的java代碼,類名是MyPreferenceActivity.java

 

 

view plain

package org.tayue; 

import android.content.SharedPreferences; 

import android.os.Bundle; 

import android.preference.CheckBoxPreference; 

import android.preference.EditTextPreference; 

import android.preference.ListPreference; 

import android.preference.Preference; 

import android.preference.Preference.OnPreferenceChangeListener; 

import android.preference.PreferenceActivity; 

/**

 * Preference用法舉例

 * @author xionglei

 *

 */ 

public class MyPreferenceActivity extends PreferenceActivity implements OnPreferenceChangeListener{ 

 

    private EditTextPreference address; 

    private EditTextPreference port; 

    private EditTextPreference group; 

    private ListPreference type; 

    private CheckBoxPreference keepAlive; 

    private CheckBoxPreference ack; 

         

    @Override 

    protected void onCreate(Bundle savedInstanceState) { 

         

        super.onCreate(savedInstanceState); 

        //加入preferences的佈局文件,這裡和普通的佈局文件加入方式不一樣,註意區別 

        addPreferencesFromResource(R.layout.preference); 

        //獲得一個共享的preferences,通過該變量來讀取配置文件中的各參數值 

        SharedPreferences sp = getPreferenceManager().getSharedPreferences(); 

         

        address = (EditTextPreference) findPreference("prefer_address"); 

        address.setOnPreferenceChangeListener(this); 

        port = (EditTextPreference) findPreference("prefer_port"); 

        port.setOnPreferenceChangeListener(this); 

        group = (EditTextPreference) findPreference("prefer_ht_group"); 

        group.setOnPreferenceChangeListener(this); 

        ack = (CheckBoxPreference) findPreference("prefer_sendACK"); 

        ack.setOnPreferenceChangeListener(this); 

        type = (ListPreference) findPreference("prefer_request_type"); 

        type.setOnPreferenceChangeListener(this); 

        keepAlive = (CheckBoxPreference) findPreference("prefer_keepAlive"); 

        keepAlive.setOnPreferenceChangeListener(this); 

         

        //sp的getString方法有兩個參數,該方法是獲取配置參數的方法,參數一是首選參數,一般在生成都配置文件中,參數二是默認參數,在無法讀取參數一的情況下就用參數二 

        String typeStr = sp.getString("prefer_request_type", getResources().getString(R.string.type)); 

        type.setSummary(typeStr); 

        type.setValue(typeStr); 

         

        String addressStr = sp.getString("prefer_address", getResources().getString(R.string.ip)); 

        address.setSummary(addressStr); 

        address.setText(addressStr); 

         

        String portStr = sp.getString("prefer_port", getResources().getString(R.string.p)); 

        port.setSummary(portStr); 

        port.setText(portStr); 

         

        String groupStr = sp.getString("prefer_ht_group", getResources().getString(R.string.group)); 

        group.setSummary(groupStr); 

        group.setText(groupStr); 

         

        ack.setChecked(sp.getBoolean("prefer_sendACK", Boolean.getBoolean(getResources().getString(R.string.alive)))); 

         

        keepAlive.setChecked(sp.getBoolean("prefer_keepAlive", Boolean.getBoolean(getResources().getString(R.string.alive)))); 

     

    } 

 

    @Override 

    public boolean onPreferenceChange(Preference preference, Object newValue) { 

        if(preference == address){ 

            preference.setSummary(newValue.toString()); 

        } 

        if(preference == port){ 

            preference.setSummary(newValue.toString()); 

        } 

        if(preference == group){ 

            preference.setSummary(newValue.toString()); 

        } 

        if(preference == type){ 

            type.setSummary(newValue.toString()); 

        } 

        if(preference == ack){ 

            preference.setSummary(newValue.toString()); 

        } 

        if(preference == keepAlive){ 

            preference.setSummary(newValue.toString()); 

        } 

        return true; 

    } 

 

preferences的佈局文件如下

 

 

 

view plain

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

<PreferenceScreen 

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

            android:title="Settings"> 

    <PreferenceCategory 

        android:title="設置"> 

        <EditTextPreference 

            android:key="prefer_address" 

            android:title="@string/setAddress"/> 

        <EditTextPreference 

            android:key="prefer_port" 

            android:numeric="integer" 

            android:title="@string/port" 

           /> 

        <ListPreference 

            android:key="prefer_request_type" 

            android:title="@string/requsttype" 

            android:dialogTitle="@string/requsttype" /> 

        <CheckBoxPreference  

            android:key="prefer_keepAlive" 

            android:title="@string/keep_alive" 

            android:summary="false" 

            /> 

        <CheckBoxPreference 

            android:key="prefer_sendACK" 

            android:title="@string/send_ack" 

            android:summary="false" 

            /> 

        <EditTextPreference 

            android:key="prefer_ht_group" 

            android:title="@string/ht_group" 

            android:dialogTitle="@string/ht_group"/> 

    </PreferenceCategory> 

 

</PreferenceScreen>     

 

 

 

該佈局文件的格式是android的規范。

通過MyPreferenceActivity類的設置後就要可以在其他activity頁面通過sharedPreference 來獲取系統的參數。中途生成的xml配置文件位於data/data/org/tayue/shared_prefs目錄下。可以pull出去查看。

 

好瞭,今天就講解到這裡,如果大傢還有些地方不明白可以下載源代碼來仔細研究下,

源代碼地址是:http://download.csdn.net/detail/bearray123/3722067

轉載請註明出處http://blog.csdn.net/bearray123

發佈留言