java.lang.Object | ||
↳ | android.app.Fragment | |
↳ | android.support.v14.preference.PreferenceFragment |
Known Direct Subclasses |
Known Indirect Subclasses |
Shows a hierarchy of Preference
objects as
lists. These preferences will
automatically save to SharedPreferences
as the user interacts with
them. To retrieve an instance of SharedPreferences
that the
preference hierarchy in this fragment will use, call
getDefaultSharedPreferences(android.content.Context)
with a context in the same package as this fragment.
Furthermore, the preferences shown will follow the visual style of system preferences. It is easy to create a hierarchy of preferences (that can be shown on multiple screens) via XML. For these reasons, it is recommended to use this fragment (as a superclass) to deal with preferences in applications.
A PreferenceScreen
object should be at the top of the preference
hierarchy. Furthermore, subsequent PreferenceScreen
in the hierarchy
denote a screen break--that is the preferences contained within subsequent
PreferenceScreen
should be shown on another screen. The preference
framework handles showing these other screens from the preference hierarchy.
The preference hierarchy can be formed in multiple ways:
Activities
that each specify its own
preferences in an XML file via Activity
meta-data
PreferenceScreen
To inflate from XML, use the addPreferencesFromResource(int)
. The
root element should be a PreferenceScreen
. Subsequent elements can point
to actual Preference
subclasses. As mentioned above, subsequent
PreferenceScreen
in the hierarchy will result in the screen break.
To specify an object hierarchy rooted with PreferenceScreen
, use
setPreferenceScreen(PreferenceScreen)
.
As a convenience, this fragment implements a click listener for any
preference in the current hierarchy, see
onPreferenceTreeClick(Preference)
.
For information about using PreferenceFragment
,
read the Settings
guide.
The following sample code shows a simple preference fragment that is populated from a resource. The resource it loads is:
<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>
The fragment implementation itself simply populates the preferences when created. Note that the preferences framework takes care of loading the current values out of the app preferences and writing them when changed:
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); } }
Nested Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PreferenceFragment.OnPreferenceDisplayDialogCallback | |||||||||||
PreferenceFragment.OnPreferenceStartFragmentCallback | Interface that PreferenceFragment's containing activity should implement to be able to process preference items that wish to switch to a specified fragment. | ||||||||||
PreferenceFragment.OnPreferenceStartScreenCallback | Interface that PreferenceFragment's containing activity should implement to be able to process preference items that wish to switch to a new screen of preferences. |
[Expand]
Inherited XML Attributes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
android.app.Fragment
|
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
String | ARG_PREFERENCE_ROOT |
Fragment argument used to specify the tag of the desired root
PreferenceScreen object.
|
[Expand]
Inherited Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From interface
android.content.ComponentCallbacks2
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Inflates the given XML resource and adds the preference hierarchy to the current
preference hierarchy.
| |||||||||||
Finds a
Preference based on its key.
| |||||||||||
Returns the
PreferenceManager used by this fragment.
| |||||||||||
Gets the root of the preference hierarchy that this fragment is showing.
| |||||||||||
Called when the fragment's activity has been created and this
fragment's view hierarchy instantiated.
| |||||||||||
Called to do initial creation of a fragment.
| |||||||||||
Called from
onCreateRecyclerView(LayoutInflater, ViewGroup, Bundle) to create the
RecyclerView.LayoutManager for the created
RecyclerView .
| |||||||||||
Called during
onCreate(Bundle) to supply the preferences for this fragment.
| |||||||||||
Creates the
RecyclerView used to display the preferences.
| |||||||||||
Called to have the fragment instantiate its user interface view.
| |||||||||||
Called when the view previously created by
onCreateView(LayoutInflater, ViewGroup, Bundle) has
been detached from the fragment.
| |||||||||||
Called when a preference in the tree requests to display a dialog.
| |||||||||||
Called by
onClick() in order to navigate to a
new screen of preferences.
| |||||||||||
Called when a preference in the tree rooted at this
PreferenceScreen has been clicked.
| |||||||||||
Called to ask the fragment to save its current dynamic state, so it
can later be reconstructed in a new instance of its process is
restarted.
| |||||||||||
Called when the Fragment is visible to the user.
| |||||||||||
Called when the Fragment is no longer started.
| |||||||||||
Sets the root of the preference hierarchy that this fragment is showing.
| |||||||||||
Inflates the given XML resource and replaces the current preference hierarchy (if any) with
the preference hierarchy rooted at
key .
|
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Creates the root adapter.
|
[Expand]
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.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
| |||||||||||
From interface
android.content.ComponentCallbacks
|
Fragment argument used to specify the tag of the desired root
PreferenceScreen
object.
Inflates the given XML resource and adds the preference hierarchy to the current preference hierarchy.
preferencesResId | The XML resource ID to inflate. |
---|
Finds a Preference
based on its key.
key | The key of the preference to retrieve. |
---|
Preference
with the key, or null.Returns the PreferenceManager
used by this fragment.
PreferenceManager
.
Gets the root of the preference hierarchy that this fragment is showing.
PreferenceScreen
that is the root of the preference
hierarchy.
Called when the fragment's activity has been created and this
fragment's view hierarchy instantiated. It can be used to do final
initialization once these pieces are in place, such as retrieving
views or restoring state. It is also useful for fragments that use
setRetainInstance(boolean)
to retain their instance,
as this callback tells the fragment when it is fully associated with
the new activity instance. This is called after onCreateView(LayoutInflater, ViewGroup, Bundle)
and before onViewStateRestored(Bundle)
.
savedInstanceState | If the fragment is being re-created from a previous saved state, this is the state. |
---|
Called to do initial creation of a fragment. This is called after
onAttach(Activity)
and before
onCreateView(LayoutInflater, ViewGroup, Bundle)
.
Note that this can be called while the fragment's activity is
still in the process of being created. As such, you can not rely
on things like the activity's content view hierarchy being initialized
at this point. If you want to do work once the activity itself is
created, see onActivityCreated(Bundle)
.
savedInstanceState | If the fragment is being re-created from a previous saved state, this is the state. |
---|
Called from onCreateRecyclerView(LayoutInflater, ViewGroup, Bundle)
to create the
RecyclerView.LayoutManager
for the created
RecyclerView
.
RecyclerView.LayoutManager
instance.
Called during onCreate(Bundle)
to supply the preferences for this fragment.
Subclasses are expected to call setPreferenceScreen(PreferenceScreen)
either
directly or via helper methods such as addPreferencesFromResource(int)
.
savedInstanceState | If the fragment is being re-created from a previous saved state, this is the state. |
---|---|
rootKey | If non-null, this preference fragment should be rooted at the
PreferenceScreen with this key.
|
Creates the RecyclerView
used to display the preferences.
Subclasses may override this to return a customized
RecyclerView
.
inflater | The LayoutInflater object that can be used to inflate the
RecyclerView . |
---|---|
parent | 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 | If non-null, this view is being re-constructed from a previous saved state as given here |
Called to have the fragment instantiate its user interface view.
This is optional, and non-graphical fragments can return null (which
is the default implementation). This will be called between
onCreate(Bundle)
and onActivityCreated(Bundle)
.
If you return a View from here, you will later be called in
onDestroyView()
when the view is being released.
inflater | The LayoutInflater object that can be used to inflate any views in the fragment, |
---|---|
container | 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 | If non-null, this fragment is being re-constructed from a previous saved state as given here. |
Called when the view previously created by onCreateView(LayoutInflater, ViewGroup, Bundle)
has
been detached from the fragment. The next time the fragment needs
to be displayed, a new view will be created. This is called
after onStop()
and before onDestroy()
. It is called
regardless of whether onCreateView(LayoutInflater, ViewGroup, Bundle)
returned a
non-null view. Internally it is called after the view's state has
been saved but before it has been removed from its parent.
Called when a preference in the tree requests to display a dialog. Subclasses should override this method to display custom dialogs or to handle dialogs for custom preference classes.
preference | The Preference object requesting the dialog. |
---|
Called by
onClick()
in order to navigate to a
new screen of preferences. Calls
onPreferenceStartScreen(PreferenceFragment, PreferenceScreen)
if the target fragment or containing activity implements
PreferenceFragment.OnPreferenceStartScreenCallback
.
preferenceScreen | The PreferenceScreen to
navigate to.
|
---|
Called when a preference in the tree rooted at this
PreferenceScreen
has been clicked.
preference | The preference that was clicked. |
---|
Called to ask the fragment to save its current dynamic state, so it
can later be reconstructed in a new instance of its process is
restarted. If a new instance of the fragment later needs to be
created, the data you place in the Bundle here will be available
in the Bundle given to onCreate(Bundle)
,
onCreateView(LayoutInflater, ViewGroup, Bundle)
, and
onActivityCreated(Bundle)
.
This corresponds to Activity.onSaveInstanceState(Bundle)
and most of the discussion there
applies here as well. Note however: this method may be called
at any time before onDestroy()
. There are many situations
where a fragment may be mostly torn down (such as when placed on the
back stack with no UI showing), but its state will not be saved until
its owning activity actually needs to save its state.
outState | Bundle in which to place your saved state. |
---|
Called when the Fragment is visible to the user. This is generally
tied to Activity.onStart
of the containing
Activity's lifecycle.
Called when the Fragment is no longer started. This is generally
tied to Activity.onStop
of the containing
Activity's lifecycle.
Sets the root of the preference hierarchy that this fragment is showing.
preferenceScreen | The root PreferenceScreen of the preference hierarchy.
|
---|
Inflates the given XML resource and replaces the current preference hierarchy (if any) with
the preference hierarchy rooted at key
.
preferencesResId | The XML resource ID to inflate. |
---|---|
key | The preference key of the PreferenceScreen
to use as the root of the preference hierarchy, or null to use the root
PreferenceScreen .
|
Creates the root adapter.
preferenceScreen | Preference screen object to create the adapter for. |
---|
PreferenceScreen
.