Most visited

Recently visited

Added in API level 11

PreferenceFragment

public abstract class PreferenceFragment
extends Fragment

java.lang.Object
   ↳ android.app.Fragment
     ↳ android.preference.PreferenceFragment


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

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

一个PreferenceScreen对象应该位于首选项层次结构的顶部。 此外,层次结构中的后续PreferenceScreen表示屏幕中断 - 即后续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将导致屏幕中断。

    要指定Intent以查询Activities每个都有首选项,请使用addPreferencesFromIntent(Intent) 每个Activity都可以在清单中指定元数据(通过密钥METADATA_KEY_PREFERENCES ),该元数据指向XML资源。 这些XML资源将被膨胀到一个单独的偏好层次结构中,并由此片段显示。

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

    为了方便起见,此片段为当前层次结构中的任何首选项实现了一个单击监听器,请参阅 onPreferenceTreeClick(PreferenceScreen, 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 PreferenceFragment.OnPreferenceStartFragmentCallback

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

    Inherited XML attributes

    From class android.app.Fragment

    Inherited constants

    From interface android.content.ComponentCallbacks2

    Public constructors

    PreferenceFragment()

    Public methods

    void addPreferencesFromIntent(Intent intent)

    添加与给定 Intent匹配的活动的首选项。

    void addPreferencesFromResource(int preferencesResId)

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

    Preference findPreference(CharSequence key)

    根据其密钥找到 Preference

    PreferenceManager getPreferenceManager()

    返回此片段使用的 PreferenceManager

    PreferenceScreen getPreferenceScreen()

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

    void onActivityCreated(Bundle savedInstanceState)

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

    void onActivityResult(int requestCode, int resultCode, Intent data)

    从先前的电话 startActivityForResult(Intent, int)接收结果。

    void onCreate(Bundle savedInstanceState)

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

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

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

    void onDestroy()

    当碎片不再使用时调用。

    void onDestroyView()

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

    boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)

    void onSaveInstanceState(Bundle outState)

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

    void onStart()

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

    void onStop()

    当片段不再启动时调用。

    void onViewCreated(View view, Bundle savedInstanceState)

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

    void setPreferenceScreen(PreferenceScreen preferenceScreen)

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

    Inherited methods

    From class android.app.Fragment
    From class java.lang.Object
    From interface android.content.ComponentCallbacks2
    From interface android.view.View.OnCreateContextMenuListener
    From interface android.content.ComponentCallbacks

    Public constructors

    PreferenceFragment

    Added in API level 11
    PreferenceFragment ()

    Public methods

    addPreferencesFromIntent

    Added in API level 11
    void addPreferencesFromIntent (Intent intent)

    添加与给定 Intent匹配的活动的首选项。

    Parameters
    intent Intent: The Intent to query activities.

    addPreferencesFromResource

    Added in API level 11
    void addPreferencesFromResource (int preferencesResId)

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

    Parameters
    preferencesResId int: The XML resource ID to inflate.

    findPreference

    Added in API level 11
    Preference findPreference (CharSequence key)

    根据其关键找到 Preference

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

    也可以看看:

    getPreferenceManager

    Added in API level 11
    PreferenceManager getPreferenceManager ()

    返回此片段使用的 PreferenceManager

    Returns
    PreferenceManager The PreferenceManager.

    getPreferenceScreen

    Added in API level 11
    PreferenceScreen getPreferenceScreen ()

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

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

    onActivityCreated

    Added in API level 11
    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.

    onActivityResult

    Added in API level 11
    void onActivityResult (int requestCode, 
                    int resultCode, 
                    Intent data)

    从先前的电话startActivityForResult(Intent, int)接收结果。 这遵循onActivityResult(int, int, Intent)所述的相关Activity API。

    Parameters
    requestCode int: The integer request code originally supplied to startActivityForResult(), allowing you to identify who this result came from.
    resultCode int: The integer result code returned by the child activity through its setResult().
    data Intent: An Intent, which can return result data to the caller (various data can be attached to Intent "extras").

    onCreate

    Added in API level 11
    void onCreate (Bundle savedInstanceState)

    被调用来做一个片段的初始创建。 这是在onAttach(Activity)之后和onAttach(Activity)之前onCreateView(LayoutInflater, ViewGroup, Bundle) ,但如果片段实例在活动重新创建期间保留(请参阅setRetainInstance(boolean) ),则不调用该实例。

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

    如果您的应用程序的targetSdkVersion为23或更低,则onCreate返回后将恢复从savedInstanceState恢复的子片段。 当定位N或更高版本并在N或更新的平台版本上运行时,它们将被恢复Fragment.onCreate

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

    onCreateView

    Added in API level 11
    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.

    onDestroy

    Added in API level 11
    void onDestroy ()

    当碎片不再使用时调用。 这是在onStop()之后和onDetach()之前onDetach()

    onDestroyView

    Added in API level 11
    void onDestroyView ()

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

    onPreferenceTreeClick

    Added in API level 11
    boolean onPreferenceTreeClick (PreferenceScreen preferenceScreen, 
                    Preference preference)

    Parameters
    preferenceScreen PreferenceScreen
    preference Preference
    Returns
    boolean

    onSaveInstanceState

    Added in API level 11
    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

    Added in API level 11
    void onStart ()

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

    onStop

    Added in API level 11
    void onStop ()

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

    onViewCreated

    Added in API level 13
    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.

    setPreferenceScreen

    Added in API level 11
    void setPreferenceScreen (PreferenceScreen preferenceScreen)

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

    Parameters
    preferenceScreen PreferenceScreen: The root PreferenceScreen of the preference hierarchy.
  • Hooray!