public abstract class PreferenceFragment
extends Fragment
implements PreferenceManager.OnPreferenceTreeClickListener, PreferenceManager.OnDisplayPreferenceDialogListener, PreferenceManager.OnNavigateToScreenListener, DialogPreference.TargetFragment
java.lang.Object | ||
↳ | android.app.Fragment | |
↳ | android.support.v14.preference.PreferenceFragment |
Known Direct Subclasses |
Known Indirect Subclasses |
以列表形式显示Preference
对象的层次结构。 这些首选项会在用户与它们交互时自动保存到SharedPreferences
。 要检索此片段中首选层次将使用的实例SharedPreferences
,请在与此片段相同的包中调用getDefaultSharedPreferences(android.content.Context)
。
此外,显示的偏好将遵循系统偏好的视觉风格。 通过XML创建偏好层次结构(可以在多个屏幕上显示)很容易。 出于这些原因,建议使用此片段(作为超类)来处理应用程序中的首选项。
一个PreferenceScreen
对象应该位于首选项层次的顶部。 此外,层次结构中的后续PreferenceScreen
表示屏幕中断 - 即后续PreferenceScreen
包含的首选项应显示在另一屏幕上。 偏好框架通过调用onNavigateToScreen(PreferenceScreen)
处理。
偏好层次可以以多种方式形成:
Activities
that each specify its own preferences in an XML file via Activity
meta-data PreferenceScreen
要从XML中膨胀,请使用addPreferencesFromResource(int)
。 根元素应该是PreferenceScreen
。 后续元素可以指向实际的Preference
子类。 如上所述,层次结构中的后续PreferenceScreen
将导致屏幕中断。
要指定以 PreferenceScreen
根的对象层次结构,请使用 setPreferenceScreen(PreferenceScreen)
。
为方便起见,此片段为当前层次结构中的任何首选项实现点击侦听器,请参阅 onPreferenceTreeClick(Preference)
。
有关使用 PreferenceFragment
信息,请阅读 Settings指南。
以下示例代码显示了从资源填充的简单首选项片段。 它加载的资源是:
<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); } }
也可以看看:
Nested classes |
|
---|---|
interface |
PreferenceFragment.OnPreferenceDisplayDialogCallback
|
interface |
PreferenceFragment.OnPreferenceStartFragmentCallback PreferenceFragment包含的活动应该实现的接口,以便能够处理希望切换到指定片段的首选项。 |
interface |
PreferenceFragment.OnPreferenceStartScreenCallback PreferenceFragment包含的活动应该实现的接口,以便能够处理希望切换到首选项新屏幕的首选项。 |
XML attributes |
|
---|---|
android:divider |
List separator to draw between preference views 可能是另一种资源的引用,其形式为“ |
android:dividerHeight |
List separator height 可能是一个维度值,这是一个浮点数,后面跟着一个单位,例如“ |
Inherited XML attributes |
|
---|---|
From class android.app.Fragment
|
Constants |
|
---|---|
String |
ARG_PREFERENCE_ROOT 片段参数,用于指定所需根目录的标记 |
Inherited constants |
---|
From interface android.content.ComponentCallbacks2
|
Public constructors |
|
---|---|
PreferenceFragment() |
Public methods |
|
---|---|
void |
addPreferencesFromResource(int preferencesResId) 使给定的XML资源膨胀并将偏好层次结构添加到当前偏好层次结构中。 |
Preference |
findPreference(CharSequence key) 根据其密钥查找 |
final RecyclerView |
getListView() |
PreferenceManager |
getPreferenceManager() 返回此片段使用的 |
PreferenceScreen |
getPreferenceScreen() 获取此片段显示的首选层次结构的根。 |
void |
onActivityCreated(Bundle savedInstanceState) 当片段的活动已经创建并且该片段的视图层次被实例化时调用。 |
void |
onCreate(Bundle savedInstanceState) 被调用来做一个片段的初始创建。 |
RecyclerView.LayoutManager |
onCreateLayoutManager() 从 |
abstract void |
onCreatePreferences(Bundle savedInstanceState, String rootKey) 在 |
RecyclerView |
onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) 创建用于显示首选项的 |
View |
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 调用以使片段实例化其用户界面视图。 |
void |
onDestroyView() 当以前由 |
void |
onDisplayPreferenceDialog(Preference preference) 当树中的首选项请求显示对话框时调用。 |
void |
onNavigateToScreen(PreferenceScreen preferenceScreen) 由 |
boolean |
onPreferenceTreeClick(Preference preference) 当根据此 |
void |
onSaveInstanceState(Bundle outState) 打电话询问片段以保存其当前的动态状态,以便稍后可以在重新启动其进程的新实例时重新构建它。 |
void |
onStart() 当片段对用户可见时调用。 |
void |
onStop() 当片段不再启动时调用。 |
void |
onViewCreated(View view, Bundle savedInstanceState) 在 |
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资源进行膨胀并将当前的首选项层次(如果有)替换为以 |
Protected methods |
|
---|---|
Adapter |
onCreateAdapter(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.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
|
列出分隔符以在偏好视图之间绘制
可能是另一种资源的引用,其形式为“ @[+][package:]type/name
”或形式为“一个主题属性 ?[package:]type/name
”。
可以是“ #rgb
”,“ #argb
”,“ #rrggbb#aarrggbb
”形式的颜色值。
相关方法:
列出分隔符高度
可能是一个维度值,这是一个浮点数,后面跟着一个单位,例如“ 14.5sp
”。 可用单位为:px(像素),dp(密度独立像素),sp(基于首选字体大小的缩放像素),单位为英寸和毫米。
相关方法:
String ARG_PREFERENCE_ROOT
片段参数,用于指定所需根目标 PreferenceScreen
的标记。
常量值:“android.support.v7.preference.PreferenceFragmentCompat.PREFERENCE_ROOT”
PreferenceFragment ()
void addPreferencesFromResource (int preferencesResId)
使给定的XML资源膨胀并将偏好层次结构添加到当前偏好层次结构中。
Parameters | |
---|---|
preferencesResId |
int : The XML resource ID to inflate. |
Preference findPreference (CharSequence key)
根据密钥查找 Preference
。
Parameters | |
---|---|
key |
CharSequence : The key of the preference to retrieve. |
Returns | |
---|---|
Preference |
The Preference with the key, or null. |
也可以看看:
PreferenceManager getPreferenceManager ()
返回此片段使用的 PreferenceManager
。
Returns | |
---|---|
PreferenceManager |
The PreferenceManager . |
PreferenceScreen getPreferenceScreen ()
获取此片段显示的首选层次结构的根。
Returns | |
---|---|
PreferenceScreen |
The PreferenceScreen that is the root of the preference hierarchy. |
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. |
void onCreate (Bundle savedInstanceState)
被调用来做一个片段的初始创建。 这将在onAttach(Activity)
之后和onAttach(Activity)
之前onCreateView(LayoutInflater, ViewGroup, Bundle)
,但如果片段实例在Activity重新创建期间保留(请参阅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. |
RecyclerView.LayoutManager onCreateLayoutManager ()
从 onCreateRecyclerView(LayoutInflater, ViewGroup, Bundle)
调用,为创建的 RecyclerView.LayoutManager
创建 RecyclerView
。
Returns | |
---|---|
RecyclerView.LayoutManager |
A new RecyclerView.LayoutManager instance. |
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. |
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 |
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. |
void onDestroyView ()
当以前由onCreateView(LayoutInflater, ViewGroup, Bundle)
创建的视图已从片段中分离时调用。 下次需要显示片段时,将创建一个新视图。 这是在onStop()
之后和onDestroy()
之前onDestroy()
。 无论它被称为onCreateView(LayoutInflater, ViewGroup, Bundle)
返回一个非空的观点。 内部它在视图的状态被保存之后但在它的父对象被移除之前被调用。
void onDisplayPreferenceDialog (Preference preference)
当树中的首选项请求显示对话框时调用。 子类应该重写此方法以显示自定义对话框或处理自定义首选项类的对话框。
Parameters | |
---|---|
preference |
Preference : The Preference object requesting the dialog. |
void onNavigateToScreen (PreferenceScreen preferenceScreen)
由onClick()
调用,以导航到首选项的新屏幕。 调用onPreferenceStartScreen(PreferenceFragment, PreferenceScreen)
如果目标片段或含活性实现PreferenceFragment.OnPreferenceStartScreenCallback
。
Parameters | |
---|---|
preferenceScreen |
PreferenceScreen : The PreferenceScreen to navigate to. |
boolean onPreferenceTreeClick (Preference preference)
当点击此树的根 PreferenceScreen
时的首选项被调用。
Parameters | |
---|---|
preference |
Preference : The preference that was clicked. |
Returns | |
---|---|
boolean |
Whether the click was handled. |
void onSaveInstanceState (Bundle outState)
打电话询问片段以保存其当前的动态状态,以便稍后可以在重新启动其进程的新实例时重新构建它。 如果片段的新实例后需要创建,您的包放在这里的数据将提供给包可onCreate(Bundle)
, onCreateView(LayoutInflater, ViewGroup, Bundle)
,并onActivityCreated(Bundle)
。
这对应于Activity.onSaveInstanceState(Bundle)
,这里的大多数讨论也适用于此。 但请注意: 此方法可能在onDestroy()
之前onDestroy()
。 有很多情况下,碎片可能大部分被拆除(例如,当放置在背堆栈上而没有UI显示时),但是它的状态不会被保存直到其拥有的活动实际上需要保存其状态。
Parameters | |
---|---|
outState |
Bundle : Bundle in which to place your saved state. |
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. |
void setDivider (Drawable divider)
设置将在列表中的每个项目之间绘制的drawable。
注意:如果drawable没有固有高度,你也应该调用 setDividerHeight(int)
。
相关XML属性:
Parameters | |
---|---|
divider |
Drawable : the drawable to use |
void setDividerHeight (int height)
设置将在列表中的每个项目之间绘制的分隔线的高度。 调用它将覆盖由setDivider(Drawable)
设置的固有高度
相关XML属性:
Parameters | |
---|---|
height |
int : The new height of the divider in pixels. |
void setPreferenceScreen (PreferenceScreen preferenceScreen)
设置此片段显示的偏好层次结构的根。
Parameters | |
---|---|
preferenceScreen |
PreferenceScreen : The root PreferenceScreen of the preference hierarchy. |
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 . |
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 . |