Android的简单应用(一)——PreferenceFragment实现应用的设置

今天主要讲解怎么使用PreferenceFragment。PreferenceFragment它与默认的SharedPreferences文件相连接,不需要你再自己写代码去操作SharedPreferences。这个是它最大的用处。

 

一、类

一个主Activity,用来存放fragment.

一个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移除然后停止工作。在你的类中的一个位置引用一个监听器,这样就好了,提供你的类的实例也不会被销毁。

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>

 

posted @ 2014-11-08 11:27  cpacm  阅读(666)  评论(0编辑  收藏  举报