2013年2月5日 星期二

Fragment子類別之PreferenceFragment


在Fragment子類別中包括了 ListFragment 、DialogFragment、PreferenceFragment 及 WebViewFragment,我們已經討論過ListFragmentDialogFragment接著繼續探討PreferenceFragment應用。

Preference稱之為"偏好設定",顧名思義如果使用在程式內容中代表你可以儲存一些資訊給程式來使用。在 Android中常見使用在程式參數設定、網頁資源(帳號、密碼之類)儲存或是新聞RSS更新時間儲存等等應用;這類的開發方法常見有 SharedPreferences 、 PreferenceActivity 及 OnPreferenceChangeListener等類別,如果使用Fragment的話就是使用PreferenceFragment類別。


實作環境:
Win 7 Sp1
Java version 1.6.0_35
Eclipse 3.7.2
ADT 20.0.1
ASUS Nexus 7 平板 (4.1.2)
HTC Sensation 手機 (4.0.3)

步驟:
1.用Eclipse建立一個Android 3.x項目以上專案並命名為PreferenceFragmentExample

2. 在res目錄下建立一個xml子目錄,在xml子目錄下建立一個 AndroidXML檔案,並將其命名為preferences.xml 其內容如下:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="Category 1" >
        <CheckBoxPreference
            android:defaultValue="false"
            android:key="checkboxPref"
            android:summary="True of False"
            android:title="Checkbox" />
    </PreferenceCategory>
    <PreferenceCategory android:title="Category 2" >
        <EditTextPreference
            android:name="EditText"
            android:defaultValue="[Enter a string here]"
            android:key="editTextPref"
            android:summary="Enter a string"
            android:title="Edit Text" />

        <RingtonePreference
            android:name="Ringtone Preference"
            android:key="ringtonePref"
            android:summary="Select a ringtone"
            android:title="Ringtones" />

        <PreferenceScreen
            android:key="secondPrefScreenPref"
            android:summary="Click here to go to the second Preference Screen"
            android:title="Second Preference Screen" >
            <EditTextPreference
                android:name="EditText"
                android:key="secondEditTextPref"
                android:summary="Enter a string"
                android:title="Edit Text (second Screen)" />
        </PreferenceScreen>
    </PreferenceCategory>

</PreferenceScreen>

3.main.xml內容如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>

4.在src/ package目錄下增加 Fragment1.java,內容如下:

package net.learn2develop.PreferenceFragmentExample;

import android.os.Bundle;
import android.preference.PreferenceFragment;

public class Fragment1 extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    }
}

5.MainActivity內容如下:

package net.learn2develop.PreferenceFragmentExample;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        Fragment1 fragment1 = new Fragment1();
        fragmentTransaction.replace(android.R.id.content, fragment1);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }
}

6. AndroidManifest.xml保持預設。


執行結果:
1.程式開始執行時會出現一個參數設定選項畫面。

2.選擇EditText選項後,輸入"南開科技大學數位生活創意系"後按下確定。

3.選擇Second Preference Screen選項,可以進入第二層Preference畫面,用返回(Back)鍵可以回到上層或離開PreferenceFragment。

4.接著確認在第2步驟中所輸入的資訊是否有存檔:
(1)如果使用模擬器的話可以使用DDMS中的File Explorer,選擇目錄 /data/data/package目錄/shared_prefs會看到一個xml檔案。

(2)如果使用平板,使用檔案總管的App選擇目錄 /data/data/package目錄/shared_prefs同樣也會看到一個xml檔案。

(3)打開xml檔案內容如下:



程式及文章參考來源:Beginning Android Tablet Application Development.
其他詳見官網 PreferenceFragment


參考:
1.SharedPreferences
http://developer.android.com/reference/android/content/SharedPreferences.html

2.PreferenceActivity
http://developer.android.com/reference/android/preference/PreferenceActivity.html

3. Preference.OnPreferenceChangeListener
http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html

4. PreferenceFragment
http://developer.android.com/reference/android/preference/PreferenceFragment.html

5. Beginning Android Tablet Application Development
http://www.wrox.com/WileyCDA/WroxTitle/Beginning-Android-Tablet-Application-Development.productCd-1118106733.html



==============延伸閱讀=====================

1.第一支Android Fragment程式--HelloFragment
http://cheng-min-i-taiwan.blogspot.tw/2012/04/android-fragment-hellofragment.html

2.Android Fragments 的生命週期
http://cheng-min-i-taiwan.blogspot.tw/2012/12/android-fragments.html

3.Fragment間的資料傳遞
http://cheng-min-i-taiwan.blogspot.tw/2013/01/fragment.html

4.Fragment與Activity間的資料傳遞
http://cheng-min-i-taiwan.blogspot.tw/2013/02/fragmentactivity.html

5.Fragment子類別之ListFragment
http://cheng-min-i-taiwan.blogspot.tw/2013/02/fragmentlistfragment.html

6.Fragment子類別之DialogFragment
http://cheng-min-i-taiwan.blogspot.tw/2013/02/fragmentdialogfragment.html

7.Fragment子類別之PreferenceFragment
http://www.cheng-min-i-taiwan.blogspot.tw/2013/02/fragmentpreferencefragment.html

8.Fragment子類別之WebViewFragment
http://cheng-min-i-taiwan.blogspot.tw/2013/02/fragmentwebviewfragment.html

沒有留言:

張貼留言