android中SharedPreferences用法詳

來源:互聯網
上載者:User

 

在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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.