咪那桑~喔嗨唷,沒想到我已經堅持到第七天,
突然有一顛顛明白為何當兵的男生都要數饅頭了(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(); //送出交易
}
}
這樣子就完成我們今天的練習啦~謝謝大家的閱讀我們明天見囉~