Most visited

Recently visited

PreferenceFragmentCompat

public abstract class PreferenceFragmentCompat
extends Fragment implements PreferenceManager.OnPreferenceTreeClickListener, PreferenceManager.OnDisplayPreferenceDialogListener, PreferenceManager.OnNavigateToScreenListener, DialogPreference.TargetFragment

java.lang.Object
   ↳ android.support.v4.app.Fragment
     ↳ android.support.v7.preference.PreferenceFragmentCompat


以列表形式显示Preference对象的层次结构。 这些首选项会在用户与它们交互时自动保存到SharedPreferences 要检索SharedPreferences的此片段中的首选项层次将使用的实例,请getDefaultSharedPreferences(android.content.Context)与此片段相同的包中的上下文来调用getDefaultSharedPreferences(android.content.Context)

此外,显示的偏好将遵循系统偏好的视觉风格。 通过XML创建偏好层次结构(可以在多个屏幕上显示)很容易。 出于这些原因,建议使用此片段(作为超类)来处理应用程序中的首选项。

一个PreferenceScreen对象应该位于首选项层次结构的顶部。 此外,层次结构中的后续PreferenceScreen表示屏幕中断 - 即后续PreferenceScreen包含的首选项应显示在另一屏幕上。 偏好框架通过调用onNavigateToScreen(PreferenceScreen)处理这个onNavigateToScreen(PreferenceScreen)

偏好层次可以以多种方式形成:

  • From an XML file specifying the hierarchy
  • From different Activities that each specify its own preferences in an XML file via Activity meta-data
  • From an object hierarchy rooted with PreferenceScreen

    要从XML中膨胀,请使用addPreferencesFromResource(int) 根元素应该是PreferenceScreen 后续元素可以指向实际的Preference子类。 如上所述,层次结构中的后续PreferenceScreen将导致屏幕中断。

    要指定以 PreferenceScreen根的对象层次结构,请使用 setPreferenceScreen(PreferenceScreen)

    为方便起见,此片段为当前层次结构中的任何首选项实现一个点击侦听器,请参阅 onPreferenceTreeClick(Preference)

    Developer Guides

    有关使用 PreferenceFragment信息,请参阅 Settings指南。

    Sample Code

    以下示例代码显示了从资源填充的简单首选项片段。 它加载的资源是:

    <PreferenceScreen
            xmlns:android="http://schemas.android.com/apk/res/android">
    
        <PreferenceCategory
                android:title="@string/inline_preferences">
    
            <CheckBoxPreference
                    android:key="checkbox_preference"
                    android:title="@string/title_checkbox_preference"
                    android:summary="@string/summary_checkbox_preference" />
    
        </PreferenceCategory>
    
        <PreferenceCategory
                android:title="@string/dialog_based_preferences">
    
            <EditTextPreference
                    android:key="edittext_preference"
                    android:title="@string/title_edittext_preference"
                    android:summary="@string/summary_edittext_preference"
                    android:dialogTitle="@string/dialog_title_edittext_preference" />
    
            <ListPreference
                    android:key="list_preference"
                    android:title="@string/title_list_preference"
                    android:summary="@string/summary_list_preference"
                    android:entries="@array/entries_list_preference"
                    android:entryValues="@array/entryvalues_list_preference"
                    android:dialogTitle="@string/dialog_title_list_preference" />
    
        </PreferenceCategory>
    
        <PreferenceCategory
                android:title="@string/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:title="@string/title_screen_preference"
                    android:summary="@string/summary_screen_preference">
    
                <!-- You can place more preferences here that will be shown on the next screen. -->
    
                <CheckBoxPreference
                        android:key="next_screen_checkbox_preference"
                        android:title="@string/title_next_screen_toggle_preference"
                        android:summary="@string/summary_next_screen_toggle_preference" />
    
            </PreferenceScreen>
    
            <PreferenceScreen
                    android:title="@string/title_intent_preference"
                    android:summary="@string/summary_intent_preference">
    
                <intent android:action="android.intent.action.VIEW"
                        android:data="http://www.android.com" />
    
            </PreferenceScreen>
    
        </PreferenceCategory>
    
        <PreferenceCategory
                android:title="@string/preference_attributes">
    
            <CheckBoxPreference
                    android:key="parent_checkbox_preference"
                    android:title="@string/title_parent_preference"
                    android:summary="@string/summary_parent_preference" />
    
            <!-- The visual style of a child is defined by this styled theme attribute. -->
            <CheckBoxPreference
                    android:key="child_checkbox_preference"
                    android:dependency="parent_checkbox_preference"
                    android:layout="?android:attr/preferenceLayoutChild"
                    android:title="@string/title_child_preference"
                    android:summary="@string/summary_child_preference" />
    
        </PreferenceCategory>
    
    </PreferenceScreen>

    片段实现本身只是在创建时填充首选项。 请注意,首选项框架负责将当前值从应用程序首选项中加载出来,并在更改时写入它们:

    public static class PrefsFragment extends PreferenceFragment {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.preferences);
        }
    }

    也可以看看:

    Summary

    Nested classes

    interface PreferenceFragmentCompat.OnPreferenceDisplayDialogCallback

     

    interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback

    PreferenceFragment包含的活动应该实现的接口,以便能够处理希望切换到指定片段的首选项。

    interface PreferenceFragmentCompat.OnPreferenceStartScreenCallback

    PreferenceFragment包含的活动应该实现的接口,以便能够处理希望切换到首选项新屏幕的首选项。

    XML attributes

    android:divider List separator to draw between preference views

    可能是另一种资源的引用,其形式为“ @[+][package:]type/name ”或形式为“一个主题属性 ?[package:]type/name ”。

    android:dividerHeight List separator height

    可能是尺寸值,这是一个浮点数,后面跟着一个单位,例如“ 14.5sp ”。

    Constants

    String ARG_PREFERENCE_ROOT

    片段参数,用于指定所需根目标 PreferenceScreen的标记。

    Public constructors

    PreferenceFragmentCompat()

    Public methods

    void addPreferencesFromResource(int preferencesResId)

    使给定的XML资源膨胀并将偏好层次结构添加到当前偏好层次结构中。

    Preference findPreference(CharSequence key)

    根据其关键找到 Preference

    final RecyclerView getListView()
    PreferenceManager getPreferenceManager()

    返回此片段使用的 PreferenceManager

    PreferenceScreen getPreferenceScreen()

    获取此片段显示的首选层次结构的根。

    void onActivityCreated(Bundle savedInstanceState)

    当片段的活动已经创建并且该片段的视图层次被实例化时调用。

    void onCreate(Bundle savedInstanceState)

    被调用来做一个片段的初始创建。

    RecyclerView.LayoutManager onCreateLayoutManager()

    onCreateRecyclerView(LayoutInflater, ViewGroup, Bundle)调用,为创建的 RecyclerView.LayoutManager创建 RecyclerView

    abstract void onCreatePreferences(Bundle savedInstanceState, String rootKey)

    onCreate(Bundle)期间 onCreate(Bundle)以提供该片段的偏好。

    RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)

    创建用于显示首选项的 RecyclerView

    View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

    调用以使片段实例化其用户界面视图。

    void onDestroyView()

    当先前由 onCreateView(LayoutInflater, ViewGroup, Bundle)创建的视图已从片段中分离时调用。

    void onDisplayPreferenceDialog(Preference preference)

    当树中的首选项请求显示对话框时调用。

    void onNavigateToScreen(PreferenceScreen preferenceScreen)

    onClick()调用,以导航到首选项的新屏幕。

    boolean onPreferenceTreeClick(Preference preference)

    当根据此 PreferenceScreen的树中的偏好已被点击时调用。

    void onSaveInstanceState(Bundle outState)

    打电话询问片段以保存其当前的动态状态,以便稍后可以在重新启动其进程的新实例时重新构建它。

    void onStart()

    当片段对用户可见时调用。

    void onStop()

    当片段不再启动时调用。

    void onViewCreated(View view, Bundle savedInstanceState)

    onCreateView(LayoutInflater, ViewGroup, Bundle)已经返回之后立即调用,但在任何保存的状态已恢复到视图之前调用。

    void scrollToPreference(Preference preference)
    void scrollToPreference(String key)
    void setDivider(Drawable divider)

    设置将在列表中的每个项目之间绘制的drawable。

    void setDividerHeight(int height)

    设置将在列表中的每个项目之间绘制的分隔线的高度。

    void setPreferenceScreen(PreferenceScreen preferenceScreen)

    设置此片段显示的偏好层次结构的根。

    void setPreferencesFromResource(int preferencesResId, String key)

    对给定的XML资源进行膨胀并将当前的首选项层次(如果有)替换为以 key根的首选项层次结构。

    Protected methods

    Adapter onCreateAdapter(PreferenceScreen preferenceScreen)

    创建根适配器。

    Inherited methods

    From class android.support.v4.app.Fragment
    From class java.lang.Object
    From interface android.content.ComponentCallbacks
    From interface android.view.View.OnCreateContextMenuListener
    From interface android.support.v7.preference.PreferenceManager.OnPreferenceTreeClickListener
    From interface android.support.v7.preference.PreferenceManager.OnDisplayPreferenceDialogListener
    From interface android.support.v7.preference.PreferenceManager.OnNavigateToScreenListener
    From interface android.support.v7.preference.DialogPreference.TargetFragment

    XML attributes

    android:divider

    列出分隔符以在偏好视图之间绘制

    可能是另一种资源的引用,其形式为“ @[+][package:]type/name ”或形式为“一个主题属性 ?[package:]type/name ”。

    可能是一个颜色值,形式为“ #rgb ”,“ #argb ”,“ #rrggbb#aarrggbb ”。

    相关方法:

    android:dividerHeight

    列出分隔符高度

    可能是一个维度值,它是一个浮点数,后面跟着一个单位,例如“ 14.5sp ”。 可用单位为:px(像素),dp(密度独立像素),sp(基于首选字体大小的缩放像素),单位为英寸和毫米。

    相关方法:

    Constants

    ARG_PREFERENCE_ROOT

    String ARG_PREFERENCE_ROOT

    片段参数,用于指定所需的根目标 PreferenceScreen的标记。

    常量值:“android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT”

    Public constructors

    PreferenceFragmentCompat

    PreferenceFragmentCompat ()

    Public methods

    addPreferencesFromResource

    void addPreferencesFromResource (int preferencesResId)

    使给定的XML资源膨胀并将偏好层次结构添加到当前偏好层次结构中。

    Parameters
    preferencesResId int: The XML resource ID to inflate.

    findPreference

    Preference findPreference (CharSequence key)

    根据其关键找到 Preference

    Parameters
    key CharSequence: The key of the preference to retrieve.
    Returns
    Preference The Preference with the key, or null.

    也可以看看:

    getListView

    RecyclerView getListView ()

    Returns
    RecyclerView

    getPreferenceManager

    PreferenceManager getPreferenceManager ()

    返回此片段使用的 PreferenceManager

    Returns
    PreferenceManager The PreferenceManager.

    getPreferenceScreen

    PreferenceScreen getPreferenceScreen ()

    获取此片段显示的首选层次结构的根。

    Returns
    PreferenceScreen The PreferenceScreen that is the root of the preference hierarchy.

    onActivityCreated

    void onActivityCreated (Bundle savedInstanceState)

    当片段的活动已经创建并且该片段的视图层次被实例化时调用。 一旦这些部分到位,它就可以用来进行最终的初始化,例如检索视图或恢复状态。 对于使用setRetainInstance(boolean)来保留实例的片段也很有用,因为此回调告诉片段何时与新活动实例完全关联。 这是在onCreateView(LayoutInflater, ViewGroup, Bundle)之后和onViewStateRestored(Bundle)之前onViewStateRestored(Bundle)

    Parameters
    savedInstanceState Bundle: If the fragment is being re-created from a previous saved state, this is the state.

    onCreate

    void onCreate (Bundle savedInstanceState)

    被调用来做一个片段的初始创建。 这是在onAttach(Activity)之后和onCreateView(LayoutInflater, ViewGroup, Bundle)之前onCreateView(LayoutInflater, ViewGroup, Bundle)

    请注意,这可以在片段的活动仍处于创建过程中时调用。 因此,您不能依赖于此时正在初始化活动的内容视图层次结构。 如果您想在创建活动本身后进行工作,请参阅onActivityCreated(Bundle)

    任何恢复的子片段将在基本 Fragment.onCreate方法返回之前创建。

    Parameters
    savedInstanceState Bundle: If the fragment is being re-created from a previous saved state, this is the state.

    onCreatePreferences

    void onCreatePreferences (Bundle savedInstanceState, 
                    String rootKey)

    onCreate(Bundle)期间onCreate(Bundle)以提供该片段的偏好。 子类来调用setPreferenceScreen(PreferenceScreen)直接或通过辅助方法,如addPreferencesFromResource(int)

    Parameters
    savedInstanceState Bundle: If the fragment is being re-created from a previous saved state, this is the state.
    rootKey String: If non-null, this preference fragment should be rooted at the PreferenceScreen with this key.

    onCreateRecyclerView

    RecyclerView onCreateRecyclerView (LayoutInflater inflater, 
                    ViewGroup parent, 
                    Bundle savedInstanceState)

    创建用于显示首选项的RecyclerView 子类可能会覆盖此以返回自定义RecyclerView

    Parameters
    inflater LayoutInflater: The LayoutInflater object that can be used to inflate the RecyclerView.
    parent ViewGroup: The parent View that the RecyclerView will be attached to. This method should not add the view itself, but this can be used to generate the LayoutParams of the view.
    savedInstanceState Bundle: If non-null, this view is being re-constructed from a previous saved state as given here
    Returns
    RecyclerView A new RecyclerView object to be placed into the view hierarchy

    onCreateView

    View onCreateView (LayoutInflater inflater, 
                    ViewGroup container, 
                    Bundle savedInstanceState)

    调用以使片段实例化其用户界面视图。 这是可选的,非图形片段可以返回null(这是默认实现)。 这将在onCreate(Bundle)onActivityCreated(Bundle)之间onActivityCreated(Bundle)

    如果你从这里返回一个视图,那么当视图被释放时,你将在 onDestroyView()被调用。

    Parameters
    inflater LayoutInflater: The LayoutInflater object that can be used to inflate any views in the fragment,
    container ViewGroup: If non-null, this is the parent view that the fragment's UI should be attached to. The fragment should not add the view itself, but this can be used to generate the LayoutParams of the view.
    savedInstanceState Bundle: If non-null, this fragment is being re-constructed from a previous saved state as given here.
    Returns
    View Return the View for the fragment's UI, or null.

    onDestroyView

    void onDestroyView ()

    当先前由onCreateView(LayoutInflater, ViewGroup, Bundle)创建的视图已从片段中分离时调用。 下次需要显示片段时,将创建一个新视图。 这是在onStop()之后和onDestroy()之前onDestroy() 无论它被称为onCreateView(LayoutInflater, ViewGroup, Bundle)返回一个非空的观点。 内部它在视图的状态被保存之后但在它的父对象被移除之前被调用。

    onDisplayPreferenceDialog

    void onDisplayPreferenceDialog (Preference preference)

    当树中的首选项请求显示对话框时调用。 子类应该重写此方法以显示自定义对话框或处理自定义首选项类的对话框。

    Parameters
    preference Preference: The Preference object requesting the dialog.

    onNavigateToScreen

    void onNavigateToScreen (PreferenceScreen preferenceScreen)

    onClick()调用,以导航到首选项的新屏幕。 调用onPreferenceStartScreen(PreferenceFragmentCompat, PreferenceScreen)如果目标片段或含活性实现PreferenceFragmentCompat.OnPreferenceStartScreenCallback

    Parameters
    preferenceScreen PreferenceScreen: The PreferenceScreen to navigate to.

    onPreferenceTreeClick

    boolean onPreferenceTreeClick (Preference preference)

    当点击 PreferenceScreenPreferenceScreen的首选项时调用。

    Parameters
    preference Preference: The preference that was clicked.
    Returns
    boolean Whether the click was handled.

    onSaveInstanceState

    void onSaveInstanceState (Bundle outState)

    打电话询问片段以保存其当前的动态状态,以便稍后可以在重新启动其进程的新实例时重新构建它。 如果片段的新实例后需要创建,您的包放在这里的数据将提供给包可onCreate(Bundle)onCreateView(LayoutInflater, ViewGroup, Bundle) ,并onActivityCreated(Bundle)

    这对应于Activity.onSaveInstanceState(Bundle) ,这里的大多数讨论也适用于此。 但请注意: 此方法可能在onDestroy()之前的任何时间被调用 有很多情况下,碎片可能大部分被拆除(例如,当放置在背堆栈上而没有UI显示时),但是它的状态不会被保存直到其拥有的活动实际上需要保存其状态。

    Parameters
    outState Bundle: Bundle in which to place your saved state.

    onStart

    void onStart ()

    当片段对用户可见时调用。 这通常与包含Activity的生命周期的Activity.onStart相关联。

    onStop

    void onStop ()

    当片段不再启动时调用。 这通常与包含Activity的生命周期的Activity.onStop相关联。

    onViewCreated

    void onViewCreated (View view, 
                    Bundle savedInstanceState)

    onCreateView(LayoutInflater, ViewGroup, Bundle)已经返回之后立即调用,但在任何保存的状态已恢复到视图之前调用。 这让子类有机会在知道其视图层次已完全创建后自行初始化。 此时片段的视图层次不会附加到其父项。

    Parameters
    view View: The View returned by onCreateView(LayoutInflater, ViewGroup, Bundle).
    savedInstanceState Bundle: If non-null, this fragment is being re-constructed from a previous saved state as given here.

    scrollToPreference

    void scrollToPreference (Preference preference)

    Parameters
    preference Preference

    scrollToPreference

    void scrollToPreference (String key)

    Parameters
    key String

    setDivider

    void setDivider (Drawable divider)

    设置将在列表中的每个项目之间绘制的drawable。

    注意:如果drawable没有固有高度,您也应该致电 setDividerHeight(int)

    相关XML属性:

    Parameters
    divider Drawable: the drawable to use

    setDividerHeight

    void setDividerHeight (int height)

    设置将在列表中的每个项目之间绘制的分隔线的高度。 调用它将覆盖由setDivider(Drawable)设置的固有高度

    相关XML属性:

    Parameters
    height int: The new height of the divider in pixels.

    setPreferenceScreen

    void setPreferenceScreen (PreferenceScreen preferenceScreen)

    设置此片段显示的偏好层次结构的根。

    Parameters
    preferenceScreen PreferenceScreen: The root PreferenceScreen of the preference hierarchy.

    setPreferencesFromResource

    void setPreferencesFromResource (int preferencesResId, 
                    String key)

    对给定的XML资源进行膨胀,并将根目录为 key的首选项层次(如果有的话)替换为当前的首选项层次结构。

    Parameters
    preferencesResId int: The XML resource ID to inflate.
    key String: The preference key of the PreferenceScreen to use as the root of the preference hierarchy, or null to use the root PreferenceScreen.

    Protected methods

    onCreateAdapter

    Adapter onCreateAdapter (PreferenceScreen preferenceScreen)

    创建根适配器。

    Parameters
    preferenceScreen PreferenceScreen: Preference screen object to create the adapter for.
    Returns
    Adapter An adapter that contains the preferences contained in this PreferenceScreen.
  • Hooray!