Android Fragement學習筆記(三)----PreferenceFragment使用

來源:互聯網
上載者:User

標籤:

    我相信每個人都Perference大家都比較熟悉,這就是我們常說的偏好,喜好設定設定,一些資料可以儲存。例如,一些元件的,我們使用上次。希望下次啟動後仍然生效,煩。一般這個時候我們便會使用perference鍵值對的方式來處理,在android3.0之前,我們一般去繼承Preference這個基類去給使用者呈現一個能夠設定的介面。當中的layout須要自己編寫,今天我們研究的是3.0之後使用片段技術的喜好設定配置方法,即使用PreferenceFragement來實現。

 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

public abstract class PreferenceFragment extends Fragment

以一個列表來展示喜好設定對象的層級關係。這些喜好設定將自己主動地儲存為SharedPreferences。使使用者可以用他們來進行互動。

為了可以又一次獲得ShaedPreferences的執行個體,該Fragement中的層級喜好設定將會在同一個包以下使用帶有一個內容相關的PreferenceManager.getDefaultSharedPreferences作為這個fragement 。

此外。所展示的喜好設定將會遵循系統喜好設定的視覺風格。通過使用XML檔案來建立各個喜好設定的視圖層級(能夠被顯示在很多頁面)會很easy。基於上述原因,推薦在應用中使用這個fragement(作為一個超類)來處理喜好設定問題。

 

一個PreferenceScreen對象應該在喜好設定層級的頂部。此外,隨後在階層PreferenceScreen表示一個螢幕切割處——就是包括隨後的PreferenceScreen應顯示在還有一個螢幕頁面上。喜好設定架構處理從喜好設定階層顯示了這些其它螢幕內容。

 

喜好設定階層能夠有非常多種方式形成:

●從一個XML檔案制定的階層。

●從不同的activity,每個activity通過meta-data在一個XML檔案裡制定他自己的喜好設定。

●從一個以PreferenceScreen為根的階層對象。

 

為了從一個XML檔案裡擷取介面,使用addPreferenceFromResource(int)方法。根項目應該使用PreferenceScreen。隨後的元素能夠指向實際的喜好設定的子類。正如上面提到的,在階層中隨後的PreferenceScreen將導致螢幕切割處。

 

為了指定一個意圖來查詢都帶有各自喜好設定的activitiy,使用addPreferenceFromIntent方法。

每一個activity能夠在manifest檔案裡指定meta-data來指向一個XML檔案資源。這些資源檔將被填充到單獨的喜好設定階層而且通過這個fragment來展示。

 

為了指定一個以PreferenceScreen為根項目的對象。使用setPreferenceScreen(PreferenceScreen)方法。

 

方便起見。這個fragment實現了一個用於當前階層中隨意喜好設定的點擊事件監聽器。onPreferenceTreeClick(PreferenceScreen,Preference).

 

以上翻譯自PreferenceFragment的官方文檔,可自行查閱其原版說明

----------------------------------------------------------------------------------------------------------------------------------------

 

依據官方文檔的說明以及內建的APIdemo中的範例,我自己使用PreferenceFragment寫了一個範例,效果與之前使用繼承PreferenceActivity差點兒相同,過程例如以下:

①建立一個project

②在MainAcitivity中加入菜單button及相應效果

package com.example.fragementexam;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.app.Activity;import android.content.Intent;public class MainActivity extends Activity {private static final int menu_setting = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubmenu.add(0,menu_setting,1,"設定").setIcon(android.R.drawable.ic_menu_preferences);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubsuper.onOptionsItemSelected(item);Intent intent = new Intent(this, FragmentPreferences.class);startActivity(intent);return false;}}

 

③在res目錄以下建立一個xml目錄,在裡面建立一個preferences.xml檔案

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >    <PreferenceCategory android:title="In-line preferences" >        <CheckBoxPreference            android:key="checkbox_preference"            android:summary="這是一個複選框"            android:title="複選框設定" />    </PreferenceCategory>    <PreferenceCategory android:title="Dialog-based preferences" >        <EditTextPreference            android:dialogTitle="請輸入你最喜歡的種族"            android:key="edittext_preference"            android:summary="一個使用了編輯文本對話方塊的範例"            android:title="請輸入你最喜歡的種族" />        <ListPreference            android:dialogTitle="請選擇一項"            android:entries="@array/entries_list_preference"            android:entryValues="@array/entryvalues_list_preference"            android:key="list_preferenc"            android:summary="一個使用了列表對話方塊的範例"            android:title="請選擇一項" />    </PreferenceCategory>    <PreferenceCategory android:title="Launch preferences" >         <!-- This PreferenceScreen tag serves as a screen break (similar to page break in word processing). Like for other preference types, we assign a key here so it is able to save and restore its instance state. -->        <PreferenceScreen            android:key="screen_preference"            android:summary="展示還有一個喜好設定配置頁面"            android:title="頁面喜好設定" >             <!-- 你能夠在這裡放置很多其它的喜好設定內容,將被在下一個頁面呈現出來 -->            <CheckBoxPreference                android:key="next_screen_checkbox_preference"                android:summary="在還有一個頁面展示但出於同一個層級的喜好設定配置"                android:title="複選框設定" />        </PreferenceScreen>        <PreferenceScreen            android:summary="從一個意圖中啟動一個activity"            android:title="意圖喜好設定" >            <intent                android:action="android.intent.action.VIEW"                android:data="http://www.baidu.com" />        </PreferenceScreen>    </PreferenceCategory>    <PreferenceCategory android:title="Preference attributes" >        <CheckBoxPreference            android:key="parent_checkbox_preference"            android:summary="這是一個可見的父類"            android:title="父類複選框喜好設定" />        <!-- 子類的可見類型是由樣式屬性定義的 -->        <CheckBoxPreference            android:dependency="parent_checkbox_preference"            android:key="child_checkbox_preference"            android:layout="?android:attr/preferenceLayoutChild"            android:summary="這是一個可見的子類"            android:title="子類複選框喜好設定" />    </PreferenceCategory></PreferenceScreen>

 

④FragmentPreferences.java的代碼部分

package com.example.fragementexam;import android.app.Activity;import android.os.Bundle;import android.preference.PreferenceFragment;public class FragmentPreferences extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragement()).commit();}public static class PrefsFragement extends PreferenceFragment{@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.preferences);}}}


最後是執行之後的效果:

 

                        

 

大約在PreferenceFragment學習使用它是如此,後來在高版本號碼高於開發這樣一種方式,當考慮。

Android Fragement學習筆記(三)----PreferenceFragment使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.