1. 程式人生 > >Android設定頁面之PreferenceFragment的簡單使用示例

Android設定頁面之PreferenceFragment的簡單使用示例

1.PreferenceFragment介紹

a.PreferenceFragment實際為Fragment的一個子類

b.建立一個PreferenceFragment需要繫結一個xml來顯示檢視

c.繫結後沒就可以當作普通Fragment使用,只是每new一個例項就會建立一個SharePreference,把之前繫結的xml中的值寫入儲存(即執行時候,會自動在/data/data/<packagename>/shared_prefs/目錄生成一個文字檔案)。

2.使用步驟

a.建立一個PreferenceFragment子類

package com.yuncai.menjin.transition;

import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.support.annotation.Nullable;
import android.util.Log;

/**
 * Function:
 * Created by TianMing.Xiong on 18-10-25.
 */

public class NavigationSummary extends PreferenceFragment implements Preference.OnPreferenceChangeListener{

    public static NavigationSummary newInstance() {
        return new NavigationSummary();
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // xml資料夾下的一個xx_preference.xml中一個<PreferenceScreen/>標籤對應一個PreferenceFragment
        addPreferencesFromResource(R.xml.preferences);

        // 獲取級別描述(組)
        Preference set_navigation = getPreferenceManager().findPreference("set_navigation");
        CharSequence summary = set_navigation.getSummary();
        CharSequence title = set_navigation.getTitle();
        Log.e("TAG","summary:"+summary+",title:"+title);
        // 監聽開關按鈕
        Preference navigation_is_show_and_hide = getPreferenceManager().findPreference("navigation_is_show_and_hide");
        // 用於監聽哪個Preference的回撥,用key標識
        navigation_is_show_and_hide.setOnPreferenceChangeListener(this);
    }

    /**
     * 必須返回true,否則newValue值永遠是false
     * @param preference
     * @param newValue
     * @return
     */
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        String key = preference.getKey();
        Log.e("TAG","key:"+key+",value:"+newValue);
        return true;
    }
}
// 輸出:
//        01-03 18:30:16.160 3450-3450/com.yuncai.menjin.transition E/TAG: summary:用於導航欄設定,title:導航欄設定
//        01-03 18:30:24.720 3450-3450/com.yuncai.menjin.transition E/TAG: key:navigation_is_show_and_hide,value:false
//        01-03 18:30:26.130 3450-3450/com.yuncai.menjin.transition E/TAG: key:navigation_is_show_and_hide,value:true

b.在res資料夾下建立一個xml資料夾,新建一個以<PreferenceScreen>為根節點的xml檔案preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 設定的類別 -->
    <PreferenceCategory
        android:key="set_navigation"
        android:summary="用於導航欄設定"
        android:title="導航欄設定">
        <CheckBoxPreference
            android:key="navigation_is_show_and_hide"
            android:summary="使裝置底部導航欄不可見"
            android:defaultValue="false"
            android:title="隱藏導航欄"/>
    </PreferenceCategory>
</PreferenceScreen>

c.在fragment中繫結

即之前fragment中的程式碼

addPreferencesFromResource(R.xml.preferences);

3.效果圖