PreferenceFragmentCompat
abstract class PreferenceFragmentCompat : Fragment, PreferenceManager.OnPreferenceTreeClickListener, PreferenceManager.OnDisplayPreferenceDialogListener, PreferenceManager.OnNavigateToScreenListener, DialogPreference.TargetFragment
BaseLeanbackPreferenceFragmentCompat |
This fragment provides a preference fragment with leanback-style behavior, suitable for embedding into broader UI elements. |
LeanbackPreferenceFragmentCompat |
This fragment provides a fully decorated leanback-style preference fragment, including a list background and header. |
A PreferenceFragmentCompat is the entry point to using the Preference library. This Fragment displays a hierarchy of Preference objects to the user. It also handles persisting values to the device. To retrieve an instance of android.content.SharedPreferences that the preference hierarchy in this fragment will use by default, call getDefaultSharedPreferences with a context in the same package as this fragment.
You can define a preference hierarchy as an XML resource, or you can build a hierarchy in code. In both cases you need to use a PreferenceScreen as the root component in your hierarchy.
To inflate from XML, use the setPreferencesFromResource. An example example XML resource is shown further down.
To build a hierarchy from code, use createPreferenceScreen to create the root PreferenceScreen. Once you have added other Preferences to this root screen with addPreference, you then need to set the screen as the root screen in your hierarchy with setPreferenceScreen.
As a convenience, this fragment implements a click listener for any preference in the current hierarchy, see onPreferenceTreeClick.
Sample Code
The following sample code shows a simple settings screen using an XML resource. The XML resource is as follows:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <PreferenceCategory android:title="@string/basic_preferences"> <Preference android:key="preference" android:title="@string/title_basic_preference" android:summary="@string/summary_basic_preference"/> <Preference android:key="stylized" android:title="@string/title_stylish_preference" android:summary="@string/summary_stylish_preference"/> <Preference android:key="icon" android:title="@string/title_icon_preference" android:summary="@string/summary_icon_preference" android:icon="@android:drawable/ic_menu_camera"/> <Preference android:key="single_line_title" android:title="@string/title_single_line_title_preference" android:summary="@string/summary_single_line_title_preference" app:singleLineTitle="true"/> </PreferenceCategory> <PreferenceCategory android:title="@string/widgets"> <CheckBoxPreference android:key="checkbox" android:title="@string/title_checkbox_preference" android:summary="@string/summary_checkbox_preference"/> <SwitchPreferenceCompat android:key="switch" android:title="@string/title_switch_preference" android:summary="@string/summary_switch_preference"/> <DropDownPreference android:key="dropdown" android:title="@string/title_dropdown_preference" android:entries="@array/entries" app:useSimpleSummaryProvider="true" android:entryValues="@array/entry_values"/> <SeekBarPreference android:key="seekbar" android:title="@string/title_seekbar_preference" android:max="10" android:defaultValue="5"/> </PreferenceCategory> <PreferenceCategory android:title="@string/dialogs"> <EditTextPreference android:key="edittext" android:title="@string/title_edittext_preference" app:useSimpleSummaryProvider="true" android:dialogTitle="@string/dialog_title_edittext_preference"/> <ListPreference android:key="list" android:title="@string/title_list_preference" app:useSimpleSummaryProvider="true" android:entries="@array/entries" android:entryValues="@array/entry_values" android:dialogTitle="@string/dialog_title_list_preference"/> <MultiSelectListPreference android:key="multi_select_list" android:title="@string/title_multi_list_preference" android:summary="@string/summary_multi_list_preference" android:entries="@array/entries" android:entryValues="@array/entry_values" android:dialogTitle="@string/dialog_title_multi_list_preference"/> </PreferenceCategory> <PreferenceCategory android:key="advanced" android:title="@string/advanced_attributes" app:initialExpandedChildrenCount="1"> <Preference android:key="expandable" android:title="@string/title_expandable_preference" android:summary="@string/summary_expandable_preference"/> <Preference 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"/> </Preference> <SwitchPreferenceCompat android:key="parent" android:title="@string/title_parent_preference" android:summary="@string/summary_parent_preference"/> <SwitchPreferenceCompat android:key="child" android:dependency="parent" android:title="@string/title_child_preference" android:summary="@string/summary_child_preference"/> <SwitchPreferenceCompat android:key="toggle_summary" android:title="@string/title_toggle_summary_preference" android:summaryOn="@string/summary_on_toggle_summary_preference" android:summaryOff="@string/summary_off_toggle_summary_preference"/> <Preference android:key="copyable" android:title="@string/title_copyable_preference" android:summary="@string/summary_copyable_preference" android:selectable="false" app:enableCopying="true"/> </PreferenceCategory> </PreferenceScreen>
The fragment that loads the XML resource is as follows:
public static class DemoFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { // Load the preferences from an XML resource setPreferencesFromResource(R.xml.preferences, rootKey); } }
| See also | |
|---|---|
Preference |
|
PreferenceScreen |
Summary
Nested types |
|---|
|
Interface that the fragment's containing activity should implement to be able to process preference items that wish to display a dialog. |
|
Interface that the fragment's containing activity should implement to be able to process preference items that wish to switch to a specified fragment. |
|
Interface that the fragment's containing activity should implement to be able to process preference items that wish to switch to a new screen of preferences. |
Constants |
|
|---|---|
const String! |
ARG_PREFERENCE_ROOT = "androidx.preference.PreferenceFragmentCompat.PREFERENCE_ROOT"Fragment argument used to specify the tag of the desired root |
Public constructors |
|---|
Public functions |
|
|---|---|
Unit |
addPreferencesFromResource(preferencesResId: @XmlRes Int)Inflates the given XML resource and adds the preference hierarchy to the current preference hierarchy. |
T? |
<T : Preference?> findPreference(key: CharSequence)Finds a |
RecyclerView! |
|
PreferenceManager! |
Returns the |
PreferenceScreen! |
Gets the root of the preference hierarchy that this fragment is showing. |
Unit |
Called to do initial creation of a fragment. |
RecyclerView.LayoutManager |
Called from |
abstract Unit |
onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?)Called during |
RecyclerView |
onCreateRecyclerView(Creates the |
View |
onCreateView(Called to have the fragment instantiate its user interface view. |
Unit |
Called when the view previously created by |
Unit |
onDisplayPreferenceDialog(preference: Preference)Called when a preference in the tree requests to display a dialog. |
Unit |
onNavigateToScreen(preferenceScreen: PreferenceScreen)Called by |
Boolean |
onPreferenceTreeClick(preference: Preference)Called when a preference in the tree rooted at this has been clicked. |
Unit |
onSaveInstanceState(outState: Bundle)Called to ask the fragment to save its current dynamic state, so it can later be reconstructed in a new instance if its process is restarted. |
Unit |
onStart()Called when the Fragment is visible to the user. |
Unit |
onStop()Called when the Fragment is no longer started. |
Unit |
onViewCreated(view: View, savedInstanceState: Bundle?)Called immediately after |
Unit |
scrollToPreference(key: String) |
Unit |
scrollToPreference(preference: Preference) |
Unit |
setDivider(divider: Drawable?)Sets the |
Unit |
setDividerHeight(height: Int)Sets the height of the divider that will be drawn between each item in the list. |
Unit |
setPreferenceScreen(preferenceScreen: PreferenceScreen!)Sets the root of the preference hierarchy that this fragment is showing. |
Unit |
setPreferencesFromResource(preferencesResId: @XmlRes Int, key: String?)Inflates the given XML resource and replaces the current preference hierarchy (if any) with the preference hierarchy rooted at |
Protected functions |
|
|---|---|
RecyclerView.Adapter |
onCreateAdapter(preferenceScreen: PreferenceScreen)Creates the root adapter. |
Inherited functions |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Constants
ARG_PREFERENCE_ROOT
const val ARG_PREFERENCE_ROOT = "androidx.preference.PreferenceFragmentCompat.PREFERENCE_ROOT": String!
Fragment argument used to specify the tag of the desired root PreferenceScreen object.
Public constructors
Public functions
addPreferencesFromResource
fun addPreferencesFromResource(preferencesResId: @XmlRes Int): Unit
Inflates the given XML resource and adds the preference hierarchy to the current preference hierarchy.
findPreference
fun <T : Preference?> findPreference(key: CharSequence): T?
Finds a Preference with the given key. Returns null if no Preference could be found with the given key.
| Parameters | |
|---|---|
key: CharSequence |
The key of the |
| Returns | |
|---|---|
T? |
The |
| See also | |
|---|---|
findPreference |
getPreferenceManager
fun getPreferenceManager(): PreferenceManager!
Returns the PreferenceManager used by this fragment.
| Returns | |
|---|---|
PreferenceManager! |
The |
getPreferenceScreen
fun getPreferenceScreen(): PreferenceScreen!
Gets the root of the preference hierarchy that this fragment is showing.
| Returns | |
|---|---|
PreferenceScreen! |
The |
onCreate
fun onCreate(savedInstanceState: Bundle?): Unit
Called to do initial creation of a fragment. This is called after onAttach and before onCreateView.
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, add a androidx.lifecycle.LifecycleObserver on the activity's Lifecycle, removing it when it receives the CREATED callback.
Any restored child fragments will be created before the base Fragment.onCreate method returns.
| Parameters | |
|---|---|
savedInstanceState: Bundle? |
If the fragment is being re-created from a previous saved state, this is the state. |
onCreateLayoutManager
fun onCreateLayoutManager(): RecyclerView.LayoutManager
Called from onCreateRecyclerView to create the RecyclerView.LayoutManager for the created RecyclerView.
| Returns | |
|---|---|
RecyclerView.LayoutManager |
A new |
onCreatePreferences
abstract fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?): Unit
Called during onCreate to supply the preferences for this fragment. Subclasses are expected to call setPreferenceScreen either directly or via helper methods such as addPreferencesFromResource.
| 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 |
onCreateRecyclerView
fun onCreateRecyclerView(
inflater: LayoutInflater,
parent: ViewGroup,
savedInstanceState: Bundle?
): RecyclerView
Creates the RecyclerView used to display the preferences. Subclasses may override this to return a customized RecyclerView.
| Parameters | |
|---|---|
inflater: LayoutInflater |
The LayoutInflater object that can be used to inflate the |
parent: ViewGroup |
The parent |
savedInstanceState: Bundle? |
If non-null, this view is being re-constructed from a previous saved state as given here. |
| Returns | |
|---|---|
RecyclerView |
A new |
onCreateView
fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View
Called to have the fragment instantiate its user interface view. This is optional, and non-graphical fragments can return null. This will be called between onCreate and onViewCreated.
A default View can be returned by calling Fragment in your constructor. Otherwise, this method returns null.
It is recommended to only inflate the layout in this method and move logic that operates on the returned View to onViewCreated.
If you return a View from here, you will later be called in onDestroyView when the view is being released.
| 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
fun onDestroyView(): Unit
Called when the view previously created by onCreateView 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 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.
onDisplayPreferenceDialog
fun onDisplayPreferenceDialog(preference: Preference): Unit
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.
| Parameters | |
|---|---|
preference: Preference |
The |
onNavigateToScreen
fun onNavigateToScreen(preferenceScreen: PreferenceScreen): Unit
Called by onClick in order to navigate to a new screen of preferences. Calls onPreferenceStartScreen if the target fragment or containing activity implements PreferenceFragmentCompat.OnPreferenceStartScreenCallback.
| Parameters | |
|---|---|
preferenceScreen: PreferenceScreen |
The |
onPreferenceTreeClick
fun onPreferenceTreeClick(preference: Preference): Boolean
Called when a preference in the tree rooted at this has been clicked.
onSaveInstanceState
fun onSaveInstanceState(outState: Bundle): Unit
Called to ask the fragment to save its current dynamic state, so it can later be reconstructed in a new instance if 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, onCreateView, and onViewCreated.
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.
| Parameters | |
|---|---|
outState: Bundle |
Bundle in which to place your saved state. |
onStart
fun onStart(): Unit
Called when the Fragment is visible to the user. This is generally tied to Activity.onStart of the containing Activity's lifecycle.
onStop
fun onStop(): Unit
Called when the Fragment is no longer started. This is generally tied to Activity.onStop of the containing Activity's lifecycle.
onViewCreated
fun onViewCreated(view: View, savedInstanceState: Bundle?): Unit
Called immediately after onCreateView has returned, but before any saved state has been restored in to the view. This gives subclasses a chance to initialize themselves once they know their view hierarchy has been completely created. The fragment's view hierarchy is not however attached to its parent at this point.
| Parameters | |
|---|---|
view: View |
The View returned by |
savedInstanceState: Bundle? |
If non-null, this fragment is being re-constructed from a previous saved state as given here. |
setDivider
fun setDivider(divider: Drawable?): Unit
Sets the Drawable that will be drawn between each item in the list.
Note: If the drawable does not have an intrinsic height, you should also call setDividerHeight.
setDividerHeight
fun setDividerHeight(height: Int): Unit
Sets the height of the divider that will be drawn between each item in the list. Calling this will override the intrinsic height as set by setDivider.
| Parameters | |
|---|---|
height: Int |
The new height of the divider in pixels |
setPreferenceScreen
fun setPreferenceScreen(preferenceScreen: PreferenceScreen!): Unit
Sets the root of the preference hierarchy that this fragment is showing.
| Parameters | |
|---|---|
preferenceScreen: PreferenceScreen! |
The root |
setPreferencesFromResource
fun setPreferencesFromResource(preferencesResId: @XmlRes Int, key: String?): Unit
Inflates the given XML resource and replaces the current preference hierarchy (if any) with the preference hierarchy rooted at key.
| Parameters | |
|---|---|
preferencesResId: @XmlRes Int |
The XML resource ID to inflate |
key: String? |
The preference key of the |
Protected functions
onCreateAdapter
protected fun onCreateAdapter(preferenceScreen: PreferenceScreen): RecyclerView.Adapter
Creates the root adapter.
| Parameters | |
|---|---|
preferenceScreen: PreferenceScreen |
The |
| Returns | |
|---|---|
RecyclerView.Adapter |
An adapter that contains the preferences contained in this |