iT邦幫忙

DAY 7
0

菜逼八的 Android 開發 30天系列 第 7

【菜逼八學Android】偏好設定的PreferenceFragment(1)

咪那桑~喔嗨唷,沒想到我已經堅持到第七天,
突然有一顛顛明白為何當兵的男生都要數饅頭了(XD)
這次要介紹的是Fragment系列中的PreferenceFragment,
在我們了解它之前,我們必須先搞懂Preference的用途是什麼,還有應該如何建置它。

Preference顧名思義就是一個偏好設定,假設今天你的程式需要去記錄一些系統設定,
例如:程式的參數、音量設定、使用者登入資料等等等...你可以自由地去設計偏好設定。
一旦設定的資料,就算退出程式,重新打開那些資料也都還是在,實在是非常方便呀!

今天做完的範例就像這樣,每一個設定項目都可以點開來填入數值

step1. 建立一個PreferenceScreen介面

首先我們要在xml資料夾底下建立一個my_preferences.xml的PreferenceScreen介面,
然後將我們要的偏好欄位設定進去,PreferenceScreen的選項有非常多,包含:
1.CheckBoxPreference:核取方塊
2.EditTextPreference:可編輯本文
3.ListPreference:單選清單
4.MultiSelectListPreference:多選清單
5.SwitchPreference:開關
6.RingtonePreference:鈴聲設定

其中PreferenceCategory則是代表偏好類別的意思,所以整個偏好設定是樹狀一層一層的

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="聲音" >
        <CheckBoxPreference
            android:key="ref_key_mute"
            android:title="是否靜音" />

        <RingtonePreference
            android:key="ref_key_ringtone"
            android:title="訊息鈴聲" />
    </PreferenceCategory>
    <PreferenceCategory android:title="使用者資訊" >
        <EditTextPreference
            android:key="ref_key_name"
            android:title="暱稱" />

        <ListPreference
            android:entries="@array/education_text"
            android:entryValues="@array/education_value"
            android:key="ref_key_education"
            android:title="教育程度" />

        <MultiSelectListPreference
            android:entries="@array/news_text"
            android:entryValues="@array/news_value"
            android:key="ref_key_news"
            android:title="欲閱讀項目" />
    </PreferenceCategory>
    <PreferenceCategory android:title="資料設定" >
        <SwitchPreference
            android:key="ref_key_sync"
            android:title="是否同步" />
    </PreferenceCategory>

</PreferenceScreen>

Step2. 建立PreferenceFragment

我們要建立一個繼承PreferenceFragment的Class,
並在onCreate中把剛剛做好的PreferenceScreen加進去,就素~這麼簡單而已

public class MyPreference extends PreferenceFragment {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.my_preferences);
	}
}

Step3. 顯示在MainActivity

做好的Fragment是不能單獨執行的,還記得Fragment最大原則嗎?
就是他一定要依附在Activity上,所以我們要透過MainActivity來呼叫PreferenceFragment

一樣宣告FragmentManager建立一個交易,然後把content的內容替換成剛剛做好的Fragment

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        MyPreference myPreference = new MyPreference(); //宣告剛剛做好的PreferenceFragment
        transaction.replace(android.R.id.content, myPreference); //將content內容取代為myPreference
        transaction.commit(); //送出交易
	}
}

這樣子就完成我們今天的練習啦~謝謝大家的閱讀我們明天見囉~


上一篇
【菜逼八學Android】可浮在Activity之上的DialogFragment(2)
下一篇
【菜逼八學Android】偏好設定的PreferenceFragment(2)
系列文
菜逼八的 Android 開發 30天30

2 則留言

0
Alan.Liu
iT邦研究生 1 級 ‧ 2014-09-24 08:31:39

讚讚

0
hanigogo
iT邦新手 3 級 ‧ 2014-09-24 08:56:33

^ w ^ 謝謝四百龍銀大大
你的文章也很讚 一起加油

我要留言

立即登入留言