您的位置:首页 > 移动开发 > Android开发

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

2014-11-08 11:27 501 查看
今天主要讲解怎么使用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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: