Androidの簡単な応用(一)——PreferenceFragment実現応用の設定

13881 ワード

今日は主にPreferenceFragmentの使い方を説明します.PreferenceFragmentデフォルトのSharedPreferencesファイルに接続されており、SharedPreferencesを操作するために自分でコードを書く必要はありません.これが最大の用途です.
 
一、クラス
fragmentを保存するためのプライマリActivity.
PreferenceFragmentです.
一つのsettings.xmlには設定した変数が格納されます.
二、具体コード
Activityのコードは次のとおりです.
public class MainActivity extends Activity{





    private SharedPreferences sp;

    private OnSharedPreferenceChangeListener listener;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);

        getFragmentManager().beginTransaction().replace(android.R.id.content, new ConfigFragment()).commit();//  Fragment。

        sp = PreferenceManager.getDefaultSharedPreferences(this);//

        Log.d("CPACM",sp.getBoolean("autoBack", false)+ sp.getString("et1", "cpacm"));

        listener = new OnSharedPreferenceChangeListener(){//SharedPreferences      

            

            @Override

            public void onSharedPreferenceChanged(

                    SharedPreferences sharedPreferences, String key) {

                Log.d("CPACM","change");

                // TODO Auto-generated method stub

                Toast.makeText(MainActivity.this, key, Toast.LENGTH_LONG).show();// SharedPreferences       ,    toast.

            }

            

        };

        sp.registerOnSharedPreferenceChangeListener(listener);

    }

    



}

注意:SharedPreferencesはWeakHashMapで傍受を維持しています.これは、現在の範囲を離れると回収の目標になるため、匿名の内部クラスをリスナーとして使用できないことを意味します.最初に動作しますが、最終的には回収され、WeakHashMapから除去され、動作を停止します.クラスの1つの場所でリスナーを参照すると、クラスのインスタンスを提供しても破棄されません.
PreferenceFragmentコードは次のとおりです.
public class ConfigFragment extends PreferenceFragment{



    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.settings);//

    }

}

settings.xmlファイル
<?xml version="1.0" encoding="utf-8"?>

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



    <CheckBoxPreference

        android:defaultValue="true"

        android:key="autoBack"

        android:summaryOff="  "

        android:summaryOn="  "

        android:title="    " />



    <PreferenceCategory android:title="SMS   " >

        <CheckBoxPreference

            android:defaultValue="false"

            android:key="smsSilence"

            android:summaryOff="  "

            android:summaryOn="  "

            android:title="  " />



        <PreferenceScreen android:title="    " >

            <CheckBoxPreference

                android:defaultValue="true"

                android:key="cb21"

                android:summaryOff="  "

                android:summaryOn="  "

                android:title="  1" />

            <CheckBoxPreference

                android:defaultValue="true"

                android:key="cb22"

                android:summaryOff="  "

                android:summaryOn="  "

                android:title="  2" />



            <ListPreference

                android:dialogTitle="     "

                android:entries="@array/entries_list_preference"

                android:entryValues="@array/entriesvalue_list_preference"

                android:key="list1"

                android:summary="    "

                android:title="android forum" />



            <EditTextPreference

                android:defaultValue="Hello EditTextPreference"

                android:dialogTitle="    "

                android:key="et1"

                android:summary="    "

                android:title="EditTextPreference Sample" />

        </PreferenceScreen>

    </PreferenceCategory>

    <PreferenceCategory android:title="    " >

        <RingtonePreference

            android:key="rt1"

            android:summary="    "

            android:title="RingtonePreference Sample" />

    </PreferenceCategory>



</PreferenceScreen>

このうちandroid:keyは、SharedPreferencesのkeyに対応しています.
arrays.xmlの値:
<?xml version="1.0" encoding="utf-8"?>

<resources>



    <string-array name="entries_list_preference">

        <item>www.anddev.org</item>

        <item>www.eoeandroid.com</item>

        <item>developer.android.com</item>

    </string-array>

    <string-array name="entriesvalue_list_preference">

        <item>1</item>

        <item>2</item>

        <item>3</item>

    </string-array>



</resources>