public class Fragment
extends Object
implements ComponentCallbacks2, View.OnCreateContextMenuListener
java.lang.Object | |
↳ | android.app.Fragment |
Known Direct Subclasses |
片段是可放置在Activity
中的应用程序的用户界面或行为的Activity
。 与碎片的相互作用通过FragmentManager
完成,可以通过Activity.getFragmentManager()
和Fragment.getFragmentManager()
。
片段类可以用许多方法来实现各种各样的结果。 在它的核心中,它代表了运行在更大的Activity
内的特定操作或界面。 片段与它所处的活动密切相关,不能单独使用。 尽管Fragment定义了自己的生命周期,但生命周期依赖于它的活动:如果活动停止,它内部的任何片段都不能启动; 当活动被破坏时,所有碎片都将被销毁。
Fragment的所有子类都必须包含一个公共无参数构造函数。 框架通常会在需要时重新实例化一个片段类,特别是在状态恢复期间,并且需要能够找到这个构造器来实例化它。 如果无参数构造函数不可用,则在状态恢复期间会发生运行时异常。
涵盖的主题包括:
有关使用片段的更多信息,请阅读 Fragments开发人员指南。
HONEYCOMB
, a version of the API at is also available for use on older platforms through
FragmentActivity
. See the blog post
Fragments For All for more details.
虽然片段的生命周期与其拥有的活动相关联,但它在标准活动生命周期中有其自身的缺陷。 它包含基本的活动生命周期方法,例如onResume()
,但也很重要的是与活动和UI生成的交互相关的方法。
生命周期方法的核心系列被调用以使片段恢复到恢复状态(与用户交互):
onAttach(Activity)
called once the fragment is associated with its activity. onCreate(Bundle)
called to do initial creation of the fragment. onCreateView(LayoutInflater, ViewGroup, Bundle)
creates and returns the view hierarchy associated with the fragment. onActivityCreated(Bundle)
tells the fragment that its activity has completed its own Activity.onCreate()
. onViewStateRestored(Bundle)
tells the fragment that all of the saved state of its view hierarchy has been restored. onStart()
makes the fragment visible to the user (based on its containing activity being started). onResume()
makes the fragment begin interacting with the user (based on its containing activity being resumed). 由于片段不再被使用,它会经历一系列相反的回调:
onPause()
fragment is no longer interacting with the user either because its activity is being paused or a fragment operation is modifying it in the activity. onStop()
fragment is no longer visible to the user either because its activity is being stopped or a fragment operation is modifying it in the activity. onDestroyView()
allows the fragment to clean up resources associated with its View. onDestroy()
called to do final cleanup of the fragment's state. onDetach()
called immediately prior to the fragment no longer being associated with its activity. 碎片可以用作应用程序布局的一部分,使您可以更好地模块化代码,并更轻松地将用户界面调整到正在运行的屏幕。 作为一个例子,我们可以看看一个由项目列表组成的简单程序,并显示每个项目的细节。
活动的布局XML可以包含<fragment>
标签,以便在布局中嵌入片段实例。 例如,以下是嵌入一个片段的简单布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment" android:id="@+id/titles" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
布局以正常方式安装在活动中:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_layout); }
标题片段显示了标题列表,非常简单,依靠ListFragment
进行大部分工作。 注意点击一个项目的实现:根据当前活动的布局,它可以创建并显示一个新片段以便就地显示详细信息(稍后会详细介绍),或者启动一个新的活动以显示详细信息。
public static class TitlesFragment extends ListFragment { boolean mDualPane; int mCurCheckPosition = 0; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Populate list with our static array of titles. setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES)); // Check to see if we have a frame in which to embed the details // fragment directly in the containing UI. View detailsFrame = getActivity().findViewById(R.id.details); mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE; if (savedInstanceState != null) { // Restore last state for checked position. mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); } if (mDualPane) { // In dual-pane mode, the list view highlights the selected item. getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); // Make sure our UI is in the correct state. showDetails(mCurCheckPosition); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("curChoice", mCurCheckPosition); } @Override public void onListItemClick(ListView l, View v, int position, long id) { showDetails(position); } /** * Helper function to show the details of a selected item, either by * displaying a fragment in-place in the current UI, or starting a * whole new activity in which it is displayed. */ void showDetails(int index) { mCurCheckPosition = index; if (mDualPane) { // We can display everything in-place with fragments, so update // the list to highlight the selected item and show the data. getListView().setItemChecked(index, true); // Check what fragment is currently shown, replace if needed. DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details); if (details == null || details.getShownIndex() != index) { // Make new fragment to show this selection. details = DetailsFragment.newInstance(index); // Execute a transaction, replacing any existing fragment // with this one inside the frame. FragmentTransaction ft = getFragmentManager().beginTransaction(); if (index == 0) { ft.replace(R.id.details, details); } else { ft.replace(R.id.a_item, details); } ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } } else { // Otherwise we need to launch a new activity to display // the dialog fragment with selected text. Intent intent = new Intent(); intent.setClass(getActivity(), DetailsActivity.class); intent.putExtra("index", index); startActivity(intent); } } }
显示所选项目内容的详细信息片段仅显示基于内置到应用程序中的字符串数组的索引的文本字符串:
public static class DetailsFragment extends Fragment { /** * Create a new instance of DetailsFragment, initialized to * show the text at 'index'. */ public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } public int getShownIndex() { return getArguments().getInt("index", 0); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { // We have different layouts, and in one of them this // fragment's containing frame doesn't exist. The fragment // may still be created from its saved state, but there is // no reason to try to create its view hierarchy because it // won't be displayed. Note this is not needed -- we could // just run the code below, where we would create and return // the view hierarchy; it would just never be used. return null; } ScrollView scroller = new ScrollView(getActivity()); TextView text = new TextView(getActivity()); int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources().getDisplayMetrics()); text.setPadding(padding, padding, padding, padding); scroller.addView(text); text.setText(Shakespeare.DIALOGUE[getShownIndex()]); return scroller; } }
在这种情况下,当用户点击标题时,当前活动中没有细节容器,因此标题片段的点击代码将启动一个新活动来显示细节片段:
public static class DetailsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { // If the screen is now in landscape mode, we can show the // dialog in-line with the list so we don't need this activity. finish(); return; } if (savedInstanceState == null) { // During initial setup, plug in the details fragment. DetailsFragment details = new DetailsFragment(); details.setArguments(getIntent().getExtras()); getFragmentManager().beginTransaction().add(android.R.id.content, details).commit(); } } }
然而,屏幕可能足够大以显示关于当前所选标题的标题列表和详情。 要在横向屏幕上使用这种布局,可以将此替代布局放置在布局平面下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment" android:id="@+id/titles" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <FrameLayout android:id="@+id/details" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" android:background="?android:attr/detailsElementBackground" /> </LinearLayout>
请注意,以前的代码将如何适应这种替代UI流程:titles片段现在将细节片段嵌入到此活动中,如果细节活动正在可以就地显示细节的配置中运行,则细节活动将自行完成。
当配置更改导致托管这些片段的活动重新启动时,其新实例可能会使用不同于之前布局的相同片段的布局。 在这种情况下,所有以前的片段仍将被实例化并在新实例中运行。 但是,任何不再与视图层次结构中的<fragment>标记关联的内容都不会创建其内容视图,并且将从isInLayout()
返回false。 (此处的代码还显示了如何确定放置在容器中的片段是否不再在具有该容器的布局中运行,并避免在该情况下创建其视图层次结构。)
<fragment>标签的属性用于控制将片段视图附加到父容器时提供的LayoutParams。 它们也可以由onInflate(Activity, AttributeSet, Bundle)
的片段作为参数进行分析。
被实例化的片段必须具有某种唯一标识符,以便如果父活动需要被销毁和重新创建,它可以与之前的实例重新关联。 这可以通过以下方式提供:
android:tag
can be used in <fragment> to provide a specific tag name for the fragment. android:id
can be used in <fragment> to provide a specific identifier for the fragment. 片段被修改的事务可以放置在拥有活动的内部后备栈中。 当用户按下活动时,在活动本身完成之前,后退堆栈中的任何交易都会弹出。
例如,考虑这个使用整数参数实例化的简单片段,并将其显示在其UI中的TextView中:
public static class CountingFragment extends Fragment { int mNum; /** * Create a new instance of CountingFragment, providing "num" * as an argument. */ static CountingFragment newInstance(int num) { CountingFragment f = new CountingFragment(); // Supply num input as an argument. Bundle args = new Bundle(); args.putInt("num", num); f.setArguments(args); return f; } /** * When creating, retrieve this instance's number from its arguments. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNum = getArguments() != null ? getArguments().getInt("num") : 1; } /** * The Fragment's UI is just a simple text view showing its * instance number. */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.hello_world, container, false); View tv = v.findViewById(R.id.text); ((TextView)tv).setText("Fragment #" + mNum); tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb)); return v; } }
一个创建片段的新实例的函数,替换正在显示的任何当前片段实例,并将该更改推送到后端堆栈可以写为:
void addFragmentToStack() { mStackLevel++; // Instantiate a new fragment. Fragment newFragment = CountingFragment.newInstance(mStackLevel); // Add the fragment to the activity, pushing this transaction // on to the back stack. FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.simple_fragment, newFragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); }
在每次调用这个函数之后,一个新的条目在堆栈中,并且按下后会弹出它以使用户返回到活动UI所处的任何以前的状态。
Nested classes |
|
---|---|
class |
Fragment.InstantiationException 发生实例化失败时由 |
class |
Fragment.SavedState 通过 |
XML attributes |
|
---|---|
android:fragmentAllowEnterTransitionOverlap |
Sets whether the enter and exit transitions should overlap when transitioning forward. |
android:fragmentAllowReturnTransitionOverlap |
Sets whether the enter and exit transitions should overlap when transitioning because of popping the back stack. |
android:fragmentEnterTransition |
The Transition that will be used to move Views into the initial scene. |
android:fragmentExitTransition |
The Transition that will be used to move Views out of the scene when the fragment is removed, hidden, or detached when not popping the back stack. |
android:fragmentReenterTransition |
The Transition that will be used to move Views in to the scene when returning due to popping a back stack. |
android:fragmentSharedElementEnterTransition |
The Transition that will be used for shared elements transferred into the content Scene. |
android:fragmentSharedElementReturnTransition |
The Transition that will be used for shared elements transferred back during a pop of the back stack. |
Inherited constants |
---|
From interface android.content.ComponentCallbacks2
|
Public constructors |
|
---|---|
Fragment() 默认的构造函数。 |
Public methods |
|
---|---|
void |
dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) 将片段的状态打印到给定的流中。 |
final boolean |
equals(Object o) 子类不能覆盖equals()。 |
final Activity |
getActivity() 返回此片段当前与之关联的活动。 |
boolean |
getAllowEnterTransitionOverlap() 返回退出转换和输入转换是否重叠。 |
boolean |
getAllowReturnTransitionOverlap() 返回返回转换和重新输入转换是否重叠。 |
final Bundle |
getArguments() 返回提供给 |
final FragmentManager |
getChildFragmentManager() 返回一个专用的FragmentManager,用于放置和管理这个Fragment中的碎片。 |
Context |
getContext() 返回该片段当前与之关联的 |
Transition |
getEnterTransition() 返回将用于将Views移动到初始场景的Transition。 |
Transition |
getExitTransition() 当不弹出背堆栈时,返回将用于将视图移出场景的过渡,当片段被移除,隐藏或分离时。 |
final FragmentManager |
getFragmentManager() 返回FragmentManager以与与该片段活动关联的片段进行交互。 |
final Object |
getHost() 返回这个片段的主机对象。 |
final int |
getId() 返回此片段已知的标识符。 |
LoaderManager |
getLoaderManager() 为这个片段返回LoaderManager,如果需要的话创建它。 |
final Fragment |
getParentFragment() 返回包含此片段的父片段。 |
Transition |
getReenterTransition() 返回由于弹出背堆栈而返回的视图,以便将视图移动到场景中。 |
final Resources |
getResources() 返回 |
final boolean |
getRetainInstance() |
Transition |
getReturnTransition() 当片段准备由于弹出背堆栈而被移除,隐藏或分离时,返回将用于将视图移出场景的Transition。 |
Transition |
getSharedElementEnterTransition() 返回将用于传输到内容场景中的共享元素的转换。 |
Transition |
getSharedElementReturnTransition() 返回将在返回堆栈弹出期间传回的共享元素的转换。 |
final String |
getString(int resId, Object... formatArgs) 从应用程序包的默认字符串表中返回一个本地化的格式化字符串,替换 |
final String |
getString(int resId) 从应用程序包的默认字符串表中返回一个本地化的字符串。 |
final String |
getTag() 获取片段的标签名称(如果指定)。 |
final Fragment |
getTargetFragment() 返回由 |
final int |
getTargetRequestCode() 返回由 |
final CharSequence |
getText(int resId) 从应用程序包的默认字符串表中返回一个本地化的,风格化的CharSequence。 |
boolean |
getUserVisibleHint() |
View |
getView() 获取片段布局的根视图(由 |
final int |
hashCode() 子类不能重写hashCode()。 |
static Fragment |
instantiate(Context context, String fname) 像 |
static Fragment |
instantiate(Context context, String fname, Bundle args) 用给定的类名创建一个Fragment的新实例。 |
final boolean |
isAdded() 如果片段当前被添加到其活动中,则返回true。 |
final boolean |
isDetached() 如果片段已从UI中明确分离,则返回true。 |
final boolean |
isHidden() 如果片段已隐藏,则返回true。 |
final boolean |
isInLayout() 如果通过<fragment>标签将布局作为活动视图层次结构的一部分包含在内,则返回true。 |
final boolean |
isRemoving() 如果此片段当前正从其活动中移除,则返回true。 |
final boolean |
isResumed() 如果片段处于恢复状态,则返回true。 |
final boolean |
isVisible() 如果片段当前对用户可见,则返回true。 |
void |
onActivityCreated(Bundle savedInstanceState) 当片段的活动已经创建并且该片段的视图层次被实例化时调用。 |
void |
onActivityResult(int requestCode, int resultCode, Intent data) 接收先前调用 |
void |
onAttach(Activity activity) 此方法在API级别23中已弃用。请改为使用 |
void |
onAttach(Context context) 当片段首次附加到其上下文时调用。 |
void |
onAttachFragment(Fragment childFragment) 当片段附加为此片段的子元素时调用。 |
void |
onConfigurationChanged(Configuration newConfig) 设备配置在组件运行时发生更改时由系统调用。 |
boolean |
onContextItemSelected(MenuItem item) 只要选择了上下文菜单中的项目,就会调用该钩子。 |
void |
onCreate(Bundle savedInstanceState) 被调用来做一个片段的初始创建。 |
Animator |
onCreateAnimator(int transit, boolean enter, int nextAnim) 当片段加载动画时调用。 |
void |
onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 当即将显示 |
void |
onCreateOptionsMenu(Menu menu, MenuInflater inflater) 初始化活动标准选项菜单的内容。 |
View |
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 调用以使片段实例化其用户界面视图。 |
void |
onDestroy() 当碎片不再使用时调用。 |
void |
onDestroyOptionsMenu() 当此片段的选项菜单项不再包含在总体选项菜单中时调用。 |
void |
onDestroyView() 当以前由 |
void |
onDetach() 当片段不再附加到其活动时调用。 |
void |
onHiddenChanged(boolean hidden) 当隐藏状态(由片段的 |
void |
onInflate(AttributeSet attrs, Bundle savedInstanceState) 此方法在API级别12中已弃用。请改为使用 |
void |
onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) 此方法在API级别23中已弃用。请改为使用 |
void |
onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState) 当片段被创建为视图布局膨胀的一部分时调用,通常通过设置活动的内容视图来调用。 |
void |
onLowMemory() 这在整个系统内存不足时调用,并且主动运行的进程应该修剪内存使用情况。 |
void |
onMultiWindowModeChanged(boolean isInMultiWindowMode) 当片段的活动从全屏模式更改为多窗口模式时调用,反之亦然。 |
boolean |
onOptionsItemSelected(MenuItem item) 只要选择了选项菜单中的项目,就会调用该钩子。 |
void |
onOptionsMenuClosed(Menu menu) 只要选项菜单被关闭(通过用户使用后退/菜单按钮取消菜单,或选择某个项目时),就会调用该钩子。 |
void |
onPause() 当碎片不再恢复时调用。 |
void |
onPictureInPictureModeChanged(boolean isInPictureInPictureMode) 当活动从画中画模式切换到画中画模式时由系统调用。 |
void |
onPrepareOptionsMenu(Menu menu) 准备显示屏幕的标准选项菜单。 |
void |
onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 从请求权限回调结果。 |
void |
onResume() 当片段对用户可见且正在积极运行时调用。 |
void |
onSaveInstanceState(Bundle outState) 打电话询问片段以保存其当前的动态状态,以便稍后可以在重新启动其进程的新实例时重新构建它。 |
void |
onStart() 当片段对用户可见时调用。 |
void |
onStop() 当片段不再启动时调用。 |
void |
onTrimMemory(int level) 当操作系统确定进程从其进程中删除不需要的内存是一个好时机时调用。 |
void |
onViewCreated(View view, Bundle savedInstanceState) 在 |
void |
onViewStateRestored(Bundle savedInstanceState) 当所有保存的状态已恢复到片段的视图层次结构中时调用。 |
void |
registerForContextMenu(View view) 为给定视图注册一个上下文菜单(多个视图可以显示上下文菜单)。 |
final void |
requestPermissions(String[] permissions, int requestCode) 请求授予此应用程序的权限。 |
void |
setAllowEnterTransitionOverlap(boolean allow) 设置退出转换和输入转换是否重叠。 |
void |
setAllowReturnTransitionOverlap(boolean allow) 设置返回转换和重新输入转换是否重叠。 |
void |
setArguments(Bundle args) 为此片段提供构造参数。 |
void |
setEnterSharedElementCallback(SharedElementCallback callback) 当使用Fragments使用自定义转换时,当此片段在未弹出返回堆栈时连接或分离时,会调用enter转换回调。 |
void |
setEnterTransition(Transition transition) 设置将用于将Views移动到初始场景的Transition。 |
void |
setExitSharedElementCallback(SharedElementCallback callback) 当自定义转换与碎片一起使用时,退出转换回调在弹出回栈时附加或分离时调用。 |
void |
setExitTransition(Transition transition) 设置当片段被移除,隐藏或在未弹出背堆栈时分离时将用于将视图移出场景的Transition。 |
void |
setHasOptionsMenu(boolean hasMenu) 报告此片段希望通过接收对 |
void |
setInitialSavedState(Fragment.SavedState state) 设置此片段应从初始构建时恢复的初始保存状态,由 |
void |
setMenuVisibility(boolean menuVisible) 设置该片段的菜单是否可见。 |
void |
setReenterTransition(Transition transition) 设置用于在由于弹出背堆栈而返回时将Views移动到场景中的Transition。 |
void |
setRetainInstance(boolean retain) 控制是否在重新创建Activity时(例如从配置更改)保留片段实例。 |
void |
setReturnTransition(Transition transition) 设置当片段准备由于弹出背堆栈而被移除,隐藏或分离时将用于将视图移出场景的Transition。 |
void |
setSharedElementEnterTransition(Transition transition) 设置将用于共享元素转移到内容场景的转换。 |
void |
setSharedElementReturnTransition(Transition transition) 设置将在回弹堆栈弹出期间回传的共享元素的转换。 |
void |
setTargetFragment(Fragment fragment, int requestCode) 此片段的可选目标。 |
void |
setUserVisibleHint(boolean isVisibleToUser) 为系统提供一个关于此片段的用户界面当前是否可见的提示。 |
boolean |
shouldShowRequestPermissionRationale(String permission) 获取是否应该以请求许可的理由显示UI。 |
void |
startActivity(Intent intent) 从片段的Activity中调用 |
void |
startActivity(Intent intent, Bundle options) 从片段的Activity中调用 |
void |
startActivityForResult(Intent intent, int requestCode) 从片段的Activity中调用 |
void |
startActivityForResult(Intent intent, int requestCode, Bundle options) 从片段的Activity中调用 |
void |
startIntentSenderForResult(IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) 从片段的Activity中调用 |
String |
toString() 返回对象的字符串表示形式。 |
void |
unregisterForContextMenu(View view) 防止为给定视图显示上下文菜单。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface android.content.ComponentCallbacks2
|
|
From interface android.view.View.OnCreateContextMenuListener
|
|
From interface android.content.ComponentCallbacks
|
设置进入和退出转换在向前转换时是否应该重叠。 对应于setAllowEnterTransitionOverlap(boolean)
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 fragmentAllowEnterTransitionOverlap
。
相关方法:
设置由于弹出后退堆栈,转换时进入和退出转换是否应该重叠。 对应于setAllowReturnTransitionOverlap(boolean)
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 fragmentAllowReturnTransitionOverlap
。
相关方法:
将用于将Views移动到最初场景的Transition。 对应于setEnterTransition(android.transition.Transition)
必须是对“ @[+][package:]type:name
”形式的其他资源或“ @[+][package:]type:name
”形式的主题属性的 ?[package:][type:]name
。
这对应于全局属性资源符号 fragmentEnterTransition
。
相关方法:
当片段被移除,隐藏或在未弹出后退堆栈时分离时,将用于将视图移出场景的Transition。 对应于setExitTransition(android.transition.Transition)
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 fragmentExitTransition
。
相关方法:
由于弹出后退栈,将用于将视图移回场景的过渡。 对应于setReenterTransition(android.transition.Transition)
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 fragmentReenterTransition
。
相关方法:
将用于共享元素的转换转移到内容场景中。 对应于setSharedElementEnterTransition(android.transition.Transition)
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 fragmentSharedElementEnterTransition
。
相关方法:
用于共享元素的过渡将在返回堆栈的弹出过程中传回。 这个转变在离开片段中起作用。 对应于setSharedElementReturnTransition(android.transition.Transition)
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 fragmentSharedElementReturnTransition
。
相关方法:
Fragment ()
默认的构造函数。 每个片段必须有一个空构造函数,因此可以在恢复其活动状态时实例化它。 强烈建议子类没有带参数的其他构造函数,因为这些构造函数在重新实例化时不会被调用; 相反,调用者可以使用setArguments(Bundle)
提供参数,然后由片段通过getArguments()
检索getArguments()
。
应用程序通常不应该实现构造函数。 第一个应用程序代码可以在片段准备好使用的地方运行,位于onAttach(Activity)
,片段实际上与其活动相关联的点。 某些应用程序可能也想要实现onInflate(Activity, AttributeSet, Bundle)
以从布局资源中检索属性,但应该在这里谨慎处理,因为这发生在片段附加到其活动上。
void dump (String prefix, FileDescriptor fd, PrintWriter writer, String[] args)
将片段的状态打印到给定的流中。
Parameters | |
---|---|
prefix |
String : Text to print at the front of each line. |
fd |
FileDescriptor : The raw file descriptor that the dump is being sent to. |
writer |
PrintWriter : The PrintWriter to which you should dump your state. This will be closed for you after you return. |
args |
String : additional arguments to the dump request. |
boolean equals (Object o)
子类不能覆盖equals()。
Parameters | |
---|---|
o |
Object : the reference object with which to compare. |
Returns | |
---|---|
boolean |
true if this object is the same as the obj argument; false otherwise. |
boolean getAllowEnterTransitionOverlap ()
返回退出转换和输入转换是否重叠。 如果属实,则输入转换将尽快开始。 如果为false,则输入转换将等到退出转换完成后再开始。
相关XML属性:
Returns | |
---|---|
boolean |
true when the enter transition should start as soon as possible or false to when it should wait until the exiting transition completes. |
boolean getAllowReturnTransitionOverlap ()
返回返回转换和重新输入转换是否重叠。 如果属实,重新进入过渡将尽快开始。 如果为false,则重新输入转换将等到返回转换完成后再开始。
相关XML属性:
Returns | |
---|---|
boolean |
true to start the reenter transition when possible or false to wait until the return transition completes. |
Bundle getArguments ()
返回提供给 setArguments(Bundle)
的参数(如果有的话)。
Returns | |
---|---|
Bundle |
FragmentManager getChildFragmentManager ()
返回一个专用的FragmentManager,用于放置和管理这个Fragment中的碎片。
Returns | |
---|---|
FragmentManager |
Transition getEnterTransition ()
返回将用于将Views移动到初始场景的Transition。 进入的视图将是具有isTransitionGroup()
常规Views或ViewGroup返回true的视图。 典型的转换将延伸Visibility
因为输入受到从INVISIBLE
到VISIBLE
可见性的VISIBLE
。
相关XML属性:
Returns | |
---|---|
Transition |
the Transition to use to move Views into the initial Scene. |
Transition getExitTransition ()
当不弹出背堆栈时,返回将用于将视图移出场景的过渡,当片段被移除,隐藏或分离时。 退出的视图将是具有isTransitionGroup()
常规Views或ViewGroup返回true的视图。 典型的转换将延伸Visibility
因为退出是通过将可见性从VISIBLE
更改为VISIBLE
来INVISIBLE
。 如果转换为空,视图将保持不受影响。
相关XML属性:
Returns | |
---|---|
Transition |
the Transition to use to move Views out of the Scene when the Fragment is being closed not due to popping the back stack. |
FragmentManager getFragmentManager ()
返回FragmentManager以与与该片段活动关联的片段进行交互。 请注意,在从getActivity()
中将片段置于FragmentTransaction
之前的时间到getActivity()
,这个值非空,直到它被提交并附加到其活动。
如果此片段是另一片段的孩子,则返回的片段管理器将是父级的 getChildFragmentManager()
。
Returns | |
---|---|
FragmentManager |
int getId ()
返回此片段已知的标识符。 这可以是布局中提供的android:id值,也可以是添加片段时提供的容器视图ID。
Returns | |
---|---|
int |
LoaderManager getLoaderManager ()
为这个片段返回LoaderManager,如果需要的话创建它。
Returns | |
---|---|
LoaderManager |
Fragment getParentFragment ()
返回包含此片段的父片段。 如果此片段直接附加到Activity,则返回null。
Returns | |
---|---|
Fragment |
Transition getReenterTransition ()
返回由于弹出背堆栈而返回的视图,以便将视图移动到场景中。 进入的视图将是那些具有isTransitionGroup()
常规Views或ViewGroup返回true。 典型的转换将延伸Visibility
因为退出是通过将可见性从VISIBLE
更改为VISIBLE
来INVISIBLE
。 如果转换为空,视图将保持不受影响。 如果没有设置,默认将使用与setExitTransition(android.transition.Transition)
相同的转换。
相关XML属性:
Returns | |
---|---|
Transition |
the Transition to use to move Views into the scene when reentering from a previously-started Activity. |
Resources getResources ()
退货 getActivity().getResources()
。
Returns | |
---|---|
Resources |
Transition getReturnTransition ()
当片段准备由于弹出背堆栈而被移除,隐藏或分离时,返回将用于将视图移出场景的Transition。 退出的视图将是具有isTransitionGroup()
常规Views或ViewGroup返回true。 典型的转换将延伸Visibility
因为输入受到从VISIBLE
到INVISIBLE
可见性的INVISIBLE
。 如果transition
为空,则输入视图将保持不受影响。
相关XML属性:
Returns | |
---|---|
Transition |
the Transition to use to move Views out of the Scene when the Fragment is preparing to close. |
Transition getSharedElementEnterTransition ()
返回将用于传输到内容场景中的共享元素的转换。 典型的转换会影响大小和位置,例如ChangeBounds
。 空值将导致转移的共享元素闪烁到最终位置。
相关XML属性:
Returns | |
---|---|
Transition |
The Transition to use for shared elements transferred into the content Scene. |
Transition getSharedElementReturnTransition ()
返回将在返回堆栈弹出期间传回的共享元素的转换。 这个转变在离开片段中起作用。 典型的转换会影响大小和位置,例如ChangeBounds
。 空值将导致转移的共享元素闪烁到最终位置。 如果未设置任何值,则默认值将使用与setSharedElementEnterTransition(android.transition.Transition)
相同的值。
相关XML属性:
Returns | |
---|---|
Transition |
The Transition to use for shared elements transferred out of the content Scene. |
String getString (int resId, Object... formatArgs)
从应用程序包的默认字符串表中返回一个本地化的格式化字符串,替换 Formatter
和 format(String, Object...)
定义的格式参数。
Parameters | |
---|---|
resId |
int : Resource id for the format string |
formatArgs |
Object : The format arguments that will be used for substitution. |
Returns | |
---|---|
String |
String getString (int resId)
从应用程序包的默认字符串表中返回一个本地化的字符串。
Parameters | |
---|---|
resId |
int : Resource id for the string |
Returns | |
---|---|
String |
Fragment getTargetFragment ()
返回由 setTargetFragment(Fragment, int)
设置的目标片段。
Returns | |
---|---|
Fragment |
int getTargetRequestCode ()
返回由 setTargetFragment(Fragment, int)
设置的目标请求代码。
Returns | |
---|---|
int |
CharSequence getText (int resId)
从应用程序包的默认字符串表中返回一个本地化的,风格化的CharSequence。
Parameters | |
---|---|
resId |
int : Resource id for the CharSequence text |
Returns | |
---|---|
CharSequence |
boolean getUserVisibleHint ()
Returns | |
---|---|
boolean |
The current value of the user-visible hint on this fragment. |
也可以看看:
View getView ()
如果提供,获取片段布局的根视图(由 onCreateView(LayoutInflater, ViewGroup, Bundle)
返回的 onCreateView(LayoutInflater, ViewGroup, Bundle)
)。
Returns | |
---|---|
View |
The fragment's root view, or null if it has no layout. |
int hashCode ()
子类不能重写hashCode()。
Returns | |
---|---|
int |
a hash code value for this object. |
Fragment instantiate (Context context, String fname)
像 instantiate(Context, String, Bundle)
但带有空参数Bundle。
Parameters | |
---|---|
context |
Context
|
fname |
String
|
Returns | |
---|---|
Fragment |
Fragment instantiate (Context context, String fname, Bundle args)
用给定的类名创建一个Fragment的新实例。 这与调用它的空构造函数相同。
Parameters | |
---|---|
context |
Context : The calling context being used to instantiate the fragment. This is currently just used to get its ClassLoader. |
fname |
String : The class name of the fragment to instantiate. |
args |
Bundle : Bundle of arguments to supply to the fragment, which it can retrieve with getArguments() . May be null. |
Returns | |
---|---|
Fragment |
Returns a new fragment instance. |
Throws | |
---|---|
InstantiationException |
If there is a failure in instantiating the given fragment class. This is a runtime exception; it is not normally expected to happen. |
boolean isDetached ()
如果片段已从UI中明确分离,则返回true。 也就是说,已经使用了FragmentTransaction.detach(Fragment)
。
Returns | |
---|---|
boolean |
boolean isHidden ()
如果片段已隐藏,则返回true。 默认显示片段。 您可以通过onHiddenChanged(boolean)
了解有关此状态的onHiddenChanged(boolean)
。 请注意,隐藏状态与其他状态正交 - 也就是说,要让用户看到,片段必须同时启动而不是隐藏。
Returns | |
---|---|
boolean |
boolean isInLayout ()
如果通过<fragment>标签将布局作为活动视图层次结构的一部分包含在内,则返回true。 当通过<fragment>标签创建片段时, 除非旧片段从先前状态恢复并且不出现在当前状态的布局中, 否则这将始终为真。
Returns | |
---|---|
boolean |
boolean isRemoving ()
如果此片段当前正从其活动中移除,则返回true。 这不是它的活动是否完成,而是它是否正在从其活动中移除。
Returns | |
---|---|
boolean |
boolean isResumed ()
如果片段处于恢复状态,则返回true。 对于onResume()
和onPause()
也是如此。
Returns | |
---|---|
boolean |
boolean isVisible ()
如果片段当前对用户可见,则返回true。 这意味着:(1)已被添加,(2)将其视图附加到窗口,并且(3)不被隐藏。
Returns | |
---|---|
boolean |
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 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"). |
void onAttach (Activity activity)
此方法在API级别23中已弃用。
改为使用onAttach(Context)
。
Parameters | |
---|---|
activity |
Activity
|
void onAttach (Context context)
当片段首次附加到其上下文时调用。 onCreate(Bundle)
将调用onCreate(Bundle)
。
Parameters | |
---|---|
context |
Context
|
void onAttachFragment (Fragment childFragment)
当片段附加为此片段的子元素时调用。
如果片段还没有先前调用 onCreate
则在附加片段的 onAttach
和附加片段的 onCreate
之前调用 onCreate
。
Parameters | |
---|---|
childFragment |
Fragment : child fragment being attached |
void onConfigurationChanged (Configuration newConfig)
设备配置在组件运行时发生更改时由系统调用。 请注意,与活动不同,当配置更改时,其他组件不会重新启动:它们必须始终处理更改的结果,例如通过重新获取资源。
在调用此函数时,您的Resources对象将被更新为返回与新配置相匹配的资源值。
有关更多信息,请阅读 Handling Runtime Changes 。
Parameters | |
---|---|
newConfig |
Configuration : The new device configuration. |
boolean onContextItemSelected (MenuItem item)
只要选择了上下文菜单中的项目,就会调用该钩子。 默认实现简单地返回false以进行正常处理(调用项目的Runnable或者根据需要向其处理程序发送消息)。 您可以将此方法用于您想要在没有其他设施的情况下进行处理的任何物品。
使用 getMenuInfo()
来获取添加了此菜单项的视图设置的额外信息。
派生类应该调用基类来执行默认的菜单处理。
Parameters | |
---|---|
item |
MenuItem : The context menu item that was selected. |
Returns | |
---|---|
boolean |
boolean Return false to allow normal context menu processing to proceed, true to consume it here. |
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. |
Animator onCreateAnimator (int transit, boolean enter, int nextAnim)
当片段加载动画时调用。
Parameters | |
---|---|
transit |
int
|
enter |
boolean
|
nextAnim |
int
|
Returns | |
---|---|
Animator |
void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
当即将显示view
的上下文菜单时调用。 与onCreateOptionsMenu(Menu, MenuInflater)
不同,每次上下文菜单即将显示时都会调用onCreateOptionsMenu(Menu, MenuInflater)
,并且应该为视图(或AdapterView
子视图中的AdapterView
,这可以在menuInfo
找到) menuInfo
)。
使用 onContextItemSelected(android.view.MenuItem)
来知道何时选择了一个项目。
默认实现调用最多 Activity.onCreateContextMenu
,但如果不需要该行为,则不能调用此实现。
在此方法返回后,保持上下文菜单是不安全的。 在构建此视图的上下文菜单时调用。 此方法返回后,保持菜单不安全。
Parameters | |
---|---|
menu |
ContextMenu : The context menu that is being built |
v |
View : The view for which the context menu is being built |
menuInfo |
ContextMenu.ContextMenuInfo : Extra information about the item for which the context menu should be shown. This information will vary depending on the class of v. |
void onCreateOptionsMenu (Menu menu, MenuInflater inflater)
初始化活动标准选项菜单的内容。 您应该将菜单项放入菜单中 。 要调用此方法,您必须首先调用setHasOptionsMenu(boolean)
。 有关更多信息,请参阅Activity.onCreateOptionsMenu
。
Parameters | |
---|---|
menu |
Menu : The options menu in which you place your items. |
inflater |
MenuInflater
|
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 onDestroy ()
当碎片不再使用时调用。 这是在onStop()
之后和onDetach()
之前onDetach()
。
void onDestroyOptionsMenu ()
当此片段的选项菜单项不再包含在总体选项菜单中时调用。 接收此调用意味着菜单需要重新构建,但是此片段的项目未包含在新建的菜单中(未调用其onCreateOptionsMenu(Menu, MenuInflater)
)。
void onDestroyView ()
当以前由onCreateView(LayoutInflater, ViewGroup, Bundle)
创建的视图已从片段中分离时调用。 下次需要显示片段时,将创建一个新视图。 这是在onStop()
之后和onDestroy()
之前onDestroy()
。 无论它被称为onCreateView(LayoutInflater, ViewGroup, Bundle)
返回一个非空的观点。 内部它在视图的状态被保存之后但在它的父对象被移除之前被调用。
void onDetach ()
当片段不再附加到其活动时调用。 这在onDestroy()
之后onDestroy()
,除非在重新创建Activity(参见setRetainInstance(boolean)
)时保留片段实例,在这种情况下,它将在onStop()
之后onStop()
。
void onHiddenChanged (boolean hidden)
当隐藏状态(由片段的 isHidden()
返回)发生变化时调用片段开始不隐藏;片段从该状态改变状态时将被调用。
Parameters | |
---|---|
hidden |
boolean : True if the fragment is now hidden, false if it is not visible. |
void onInflate (AttributeSet attrs, Bundle savedInstanceState)
此方法在API级别12中已被弃用。
改为使用onInflate(Context, AttributeSet, Bundle)
。
Parameters | |
---|---|
attrs |
AttributeSet
|
savedInstanceState |
Bundle
|
void onInflate (Activity activity, AttributeSet attrs, Bundle savedInstanceState)
此方法在API级别23中已弃用。
改为使用onInflate(Context, AttributeSet, Bundle)
。
Parameters | |
---|---|
activity |
Activity
|
attrs |
AttributeSet
|
savedInstanceState |
Bundle
|
void onInflate (Context context, AttributeSet attrs, Bundle savedInstanceState)
当片段被创建为视图布局膨胀的一部分时调用,通常通过设置活动的内容视图来调用。 这可能会在从a创建片段后立即调用
onAttach(Activity)
被调用之前;
你所要做的就是解析这些属性并将它们保存起来。
这被称为每次碎片被充气时,即使它正在充气到具有保存状态的新实例。 每次重新解析参数通常都是有意义的,以允许它们以不同的配置进行更改。
下面是一个片段的典型实现,它可以通过此处提供的属性以及 getArguments()
获取参数:
public static class MyFragment extends Fragment { CharSequence mLabel; /** * Create a new instance of MyFragment that will be initialized * with the given arguments. */ static MyFragment newInstance(CharSequence label) { MyFragment f = new MyFragment(); Bundle b = new Bundle(); b.putCharSequence("label", label); f.setArguments(b); return f; } /** * Parse attributes during inflation from a view hierarchy into the * arguments we handle. */ @Override public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { super.onInflate(activity, attrs, savedInstanceState); TypedArray a = activity.obtainStyledAttributes(attrs, R.styleable.FragmentArguments); mLabel = a.getText(R.styleable.FragmentArguments_android_label); a.recycle(); } /** * During creation, if arguments have been supplied to the fragment * then parse those out. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); if (args != null) { mLabel = args.getCharSequence("label", mLabel); } } /** * Create the view for this fragment, using the arguments given to it. */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.hello_world, container, false); View tv = v.findViewById(R.id.text); ((TextView)tv).setText(mLabel != null ? mLabel : "(no label)"); tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb)); return v; } }
请注意,解析XML属性使用“样式”资源。 这里使用的styleable的声明是:
<declare-styleable name="FragmentArguments"> <attr name="android:label" /> </declare-styleable>
然后可以通过像这样的标签在其活动的内容布局中声明片段:
<fragment class="com.example.android.apis.app.FragmentArguments$MyFragment" android:id="@+id/embedded" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" android:label="@string/fragment_arguments_embedded" />
这个片段也可以从运行时在参数Bundle中给出的参数动态创建; 这是创建包含活动时的一个例子:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_arguments); if (savedInstanceState == null) { // First-time init; create fragment to embed in activity. FragmentTransaction ft = getFragmentManager().beginTransaction(); Fragment newFragment = MyFragment.newInstance("From Arguments"); ft.add(R.id.created, newFragment); ft.commit(); } }
Parameters | |
---|---|
context |
Context : The Context that is inflating this fragment. |
attrs |
AttributeSet : The attributes at the tag where the fragment is being created. |
savedInstanceState |
Bundle : If the fragment is being re-created from a previous saved state, this is the state. |
void onLowMemory ()
这在整个系统内存不足时调用,并且主动运行的进程应该修剪内存使用情况。 虽然没有定义它的确切位置,但通常会在所有后台进程都被终止时发生。 也就是说,在达到托管服务和前台UI的杀死进程之前,我们希望避免杀死。
你应该实现这个方法来释放你可能持有的任何缓存或其他不必要的资源。 系统将从此方法返回后为您执行垃圾回收。
优选地,您应该从ComponentCallbacks2
实施onTrimMemory(int)
,以基于不同级别的内存需求递增地卸载资源。 该API可用于API级别14和更高的,所以你应该只使用这个onLowMemory()
方法,旧版本的回退,可以治疗一样onTrimMemory(int)
与TRIM_MEMORY_COMPLETE
水平。
void onMultiWindowModeChanged (boolean isInMultiWindowMode)
当片段的活动从全屏模式更改为多窗口模式时调用,反之亦然。 这通常与包含Activity的onMultiWindowModeChanged(boolean)
相关联。
Parameters | |
---|---|
isInMultiWindowMode |
boolean : True if the activity is in multi-window mode. |
boolean onOptionsItemSelected (MenuItem item)
只要选择了选项菜单中的项目,就会调用该钩子。 默认实现简单地返回false以进行正常处理(调用项目的Runnable或者根据需要向其处理程序发送消息)。 您可以将此方法用于您想要在没有其他设施的情况下进行处理的任何物品。
派生类应该调用基类来执行默认的菜单处理。
Parameters | |
---|---|
item |
MenuItem : The menu item that was selected. |
Returns | |
---|---|
boolean |
boolean Return false to allow normal menu processing to proceed, true to consume it here. |
void onOptionsMenuClosed (Menu menu)
只要选项菜单被关闭(通过用户使用后退/菜单按钮取消菜单,或选择某个项目时),就会调用该钩子。
Parameters | |
---|---|
menu |
Menu : The options menu as last shown or first initialized by onCreateOptionsMenu(). |
void onPictureInPictureModeChanged (boolean isInPictureInPictureMode)
当活动从画中画模式切换到画中画模式时由系统调用。 这通常与包含Activity的onPictureInPictureModeChanged(boolean)
相关联。
Parameters | |
---|---|
isInPictureInPictureMode |
boolean : True if the activity is in picture-in-picture mode. |
void onPrepareOptionsMenu (Menu menu)
准备显示屏幕的标准选项菜单。 在菜单显示之前,每当显示菜单时都会调用它。 您可以使用此方法高效地启用/禁用项目或以其他方式动态修改内容。 有关更多信息,请参阅Activity.onPrepareOptionsMenu
。
Parameters | |
---|---|
menu |
Menu : The options menu as last shown or first initialized by onCreateOptionsMenu(). |
void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults)
从请求权限回调结果。 对于requestPermissions(String[], int)
上的每个调用都会调用此方法。
注意:与用户的权限请求交互可能会中断。 在这种情况下,您将收到空权限和结果数组,这些数据应视为取消。
Parameters | |
---|---|
requestCode |
int : The request code passed in requestPermissions(String[], int) . |
permissions |
String : The requested permissions. Never null. |
grantResults |
int : The grant results for the corresponding permissions which is either PERMISSION_GRANTED or PERMISSION_DENIED . Never null. |
void onResume ()
当片段对用户可见且正在积极运行时调用。 这通常与包含Activity的生命周期的Activity.onResume
相关联。
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. |
void onTrimMemory (int level)
当操作系统确定进程从其进程中删除不需要的内存是一个好时机时调用。 例如,当它进入后台并且没有足够的内存来保持尽可能多的后台进程运行时,会发生这种情况。 您不应该与级别的确切值进行比较,因为可能会添加新的中间值 - 如果值大于或等于您感兴趣的级别,通常需要比较。
要在任何点检索处理当前修剪水平,可以使用 ActivityManager.getMyMemoryState(RunningAppProcessInfo)
。
Parameters | |
---|---|
level |
int : The context of the trim, giving a hint of the amount of trimming the application may like to perform. May be TRIM_MEMORY_COMPLETE , TRIM_MEMORY_MODERATE , TRIM_MEMORY_BACKGROUND , TRIM_MEMORY_UI_HIDDEN , TRIM_MEMORY_RUNNING_CRITICAL , TRIM_MEMORY_RUNNING_LOW , or TRIM_MEMORY_RUNNING_MODERATE . |
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 onViewStateRestored (Bundle savedInstanceState)
当所有保存的状态已恢复到片段的视图层次结构中时调用。 这可以用来根据保存的状态来进行初始化,您可以让视图层次结构自行跟踪,比如当前是否检查复选框小部件。 这是在onActivityCreated(Bundle)
之后和onStart()
之前onStart()
。
Parameters | |
---|---|
savedInstanceState |
Bundle : If the fragment is being re-created from a previous saved state, this is the state. |
void registerForContextMenu (View view)
为给定视图注册一个上下文菜单(多个视图可以显示上下文菜单)。 此方法将在视图上设置View.OnCreateContextMenuListener
,因此在显示上下文菜单时将调用onCreateContextMenu(ContextMenu, View, ContextMenuInfo)
。
Parameters | |
---|---|
view |
View : The view that should show a context menu. |
void requestPermissions (String[] permissions, int requestCode)
请求授予此应用程序的权限。 这些权限必须在您的清单中请求,它们不应被授予您的应用程序,并且它们应具有#PROTECTION_DANGEROUS dangerous
保护级别,而不管它们是由平台还是由第三方应用程序声明。
普通权限PROTECTION_NORMAL
如果在清单中有请求,则在安装时授予。 签名权限PROTECTION_SIGNATURE
在安装时根据清单中的请求被授予,并且您的应用的签名与声明权限的应用的签名匹配。
如果您的应用程序没有请求的权限,用户将看到用户界面接受它们。 在用户接受或拒绝所请求的权限后,您将收到onRequestPermissionsResult(int, String[], int[])
报告权限是否被授予。
请注意,请求权限并不能保证它将被授予,并且您的应用程序应该能够在没有此权限的情况下运行。
此方法可能会启动一项活动,允许用户选择授予哪些权限以及拒绝哪些权限。 因此,您应该准备好您的活动可能会暂停并恢复。 此外,授予某些权限可能需要重新启动应用程序。 在这种情况下,系统会在将结果发送到onRequestPermissionsResult(int, String[], int[])
之前重新创建活动堆栈。
在检查您是否有权 checkSelfPermission(String)
您应该使用 checkSelfPermission(String)
。
调用此API以获得已授予您的应用程序的权限将向用户显示UI,以决定应用程序是否仍可拥有这些权限。 如果您的应用程序使用受权限保护的数据的方式发生显着变化,这会非常有用。
如果你的活动设置,您不能要求一个权限 noHistory
至 true
,因为在这种情况下活动不会接受结果的回调,包括 onRequestPermissionsResult(int, String[], int[])
。
示例权限请求如下所示:
private void showContacts(){if(getActivity()。checkSelfPermission(Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED){requestPermissions(new String [] {Manifest.permission.READ_CONTACTS},PERMISSIONS_REQUEST_READ_CONTACTS); } else {doShowContacts(); }} @Override public void onRequestPermissionsResult(int requestCode,String [] permissions,int [] grantResults){if(requestCode == PERMISSIONS_REQUEST_READ_CONTACTS && grantResults [0] == PackageManager.PERMISSION_GRANTED){doShowContacts(); }}
Parameters | |
---|---|
permissions |
String : The requested permissions. Must me non-null and not empty. |
requestCode |
int : Application specific request code to match with a result reported to onRequestPermissionsResult(int, String[], int[]) . Should be >= 0. |
void setAllowEnterTransitionOverlap (boolean allow)
设置退出转换和输入转换是否重叠。 如果属实,则输入转换将尽快开始。 如果为false,则输入转换将等到退出转换完成后再开始。
相关XML属性:
Parameters | |
---|---|
allow |
boolean : true to start the enter transition when possible or false to wait until the exiting transition completes. |
void setAllowReturnTransitionOverlap (boolean allow)
设置返回转换和重新输入转换是否重叠。 如果属实,重新进入过渡将尽快开始。 如果为false,则重新输入转换将等到返回转换完成后再开始。
相关XML属性:
Parameters | |
---|---|
allow |
boolean : true to start the reenter transition when possible or false to wait until the return transition completes. |
void setArguments (Bundle args)
为此片段提供构造参数。 这只能在片段附加到其活动之前调用; 也就是说,您应该在构建片段后立即调用它。 这里提供的参数将在片段销毁和创建时保留。
Parameters | |
---|---|
args |
Bundle
|
void setEnterSharedElementCallback (SharedElementCallback callback)
当使用Fragments使用自定义转换时,当此片段在未弹出返回堆栈时连接或分离时,会调用enter转换回调。
Parameters | |
---|---|
callback |
SharedElementCallback : Used to manipulate the shared element transitions on this Fragment when added not as a pop from the back stack. |
void setEnterTransition (Transition transition)
设置将用于将Views移动到初始场景的Transition。 进入的视图将是那些具有isTransitionGroup()
常规Views或ViewGroup返回true。 典型的转换将延伸Visibility
因为进入受到从INVISIBLE
到VISIBLE
可见性的VISIBLE
。 如果transition
为空,则输入视图将不受影响。
相关XML属性:
Parameters | |
---|---|
transition |
Transition : The Transition to use to move Views into the initial Scene. |
void setExitSharedElementCallback (SharedElementCallback callback)
当自定义转换与碎片一起使用时,退出转换回调在弹出回栈时附加或分离时调用。
Parameters | |
---|---|
callback |
SharedElementCallback : Used to manipulate the shared element transitions on this Fragment when added as a pop from the back stack. |
void setExitTransition (Transition transition)
设置当片段被移除,隐藏或在未弹出背堆栈时分离时将用于将视图移出场景的Transition。 退出的视图将是具有isTransitionGroup()
常规Views或ViewGroup返回true。 典型的转换将延长Visibility
因为退出受到从VISIBLE
到INVISIBLE
可见性的INVISIBLE
。 如果转换为空,视图将保持不受影响。
相关XML属性:
Parameters | |
---|---|
transition |
Transition : The Transition to use to move Views out of the Scene when the Fragment is being closed not due to popping the back stack. |
void setHasOptionsMenu (boolean hasMenu)
报告此片段希望通过接收对 onCreateOptionsMenu(Menu, MenuInflater)
和相关方法的调用来参与填充选项菜单。
Parameters | |
---|---|
hasMenu |
boolean : If true, the fragment has menu items to contribute. |
void setInitialSavedState (Fragment.SavedState state)
设置此片段应该从第一次构建时恢复的初始保存状态,由 FragmentManager.saveFragmentInstanceState
返回。
Parameters | |
---|---|
state |
Fragment.SavedState : The state the fragment should be restored from. |
void setMenuVisibility (boolean menuVisible)
设置该片段的菜单是否可见。 如果您知道某个片段已放置在您的视图层次结构中,以便用户目前无法看到该片段,则此功能非常有用,因此它所具有的任何菜单项都不应显示。
Parameters | |
---|---|
menuVisible |
boolean : The default is true, meaning the fragment's menu will be shown as usual. If false, the user will not see the menu. |
void setReenterTransition (Transition transition)
设置用于在由于弹出背堆栈而返回时将Views移动到场景中的Transition。 进入的视图将是那些具有isTransitionGroup()
常规Views或ViewGroup返回true。 典型转换将延长Visibility
因为退出受VISIBLE
到INVISIBLE
可见性INVISIBLE
。 如果转换为空,视图将保持不受影响。 如果没有设置,则默认将使用与setExitTransition(android.transition.Transition)
相同的转换。
相关XML属性:
Parameters | |
---|---|
transition |
Transition : The Transition to use to move Views into the scene when reentering from a previously-started Activity. |
void setRetainInstance (boolean retain)
控制是否在重新创建Activity时(例如从配置更改)保留片段实例。 这只能用于不在后端堆栈中的碎片。 如果设置,则在重新创建活动时,片段生命周期将略有不同:
onDestroy()
will not be called (but onDetach()
still will be, because the fragment is being detached from its current activity). onCreate(Bundle)
will not be called since the fragment is not being re-created. onAttach(Activity)
and onActivityCreated(Bundle)
will still be called. Parameters | |
---|---|
retain |
boolean
|
void setReturnTransition (Transition transition)
设置当片段准备由于弹出背堆栈而被移除,隐藏或分离时将用于将视图移出场景的Transition。 退出的视图将是具有isTransitionGroup()
常规Views或ViewGroup返回true的视图。 典型的转换将延伸Visibility
因为输入受到从VISIBLE
到INVISIBLE
可见性的INVISIBLE
。 如果transition
为空,则输入视图将保持不受影响。 如果没有设置,默认值将使用与setEnterTransition(android.transition.Transition)
设置的值相同的值。
相关XML属性:
Parameters | |
---|---|
transition |
Transition : The Transition to use to move Views out of the Scene when the Fragment is preparing to close. |
void setSharedElementEnterTransition (Transition transition)
设置将用于共享元素转移到内容场景的转换。 典型的转换会影响大小和位置,例如ChangeBounds
。 空值将导致转移的共享元素闪烁到最终位置。
相关XML属性:
Parameters | |
---|---|
transition |
Transition : The Transition to use for shared elements transferred into the content Scene. |
void setSharedElementReturnTransition (Transition transition)
设置将在回弹堆栈弹出期间回传的共享元素的转换。 这个转变在离开片段中起作用。 典型的转换会影响大小和位置,例如ChangeBounds
。 空值将导致转移的共享元素闪烁到最终位置。 如果未设置任何值,则默认值将使用与setSharedElementEnterTransition(android.transition.Transition)
相同的值。
相关XML属性:
Parameters | |
---|---|
transition |
Transition : The Transition to use for shared elements transferred out of the content Scene. |
void setTargetFragment (Fragment fragment, int requestCode)
此片段的可选目标。 例如,如果这个片段被另一个片段启动,并且完成时想要将结果返回给第一个片段,则可以使用这个。 这里设置的目标通过FragmentManager.putFragment()
跨实例保留。
Parameters | |
---|---|
fragment |
Fragment : The fragment that is the target of this one. |
requestCode |
int : Optional request code, for convenience if you are going to call back with onActivityResult(int, int, Intent) . |
void setUserVisibleHint (boolean isVisibleToUser)
为系统提供一个关于此片段的用户界面当前是否可见的提示。 此提示默认为true,并且在片段实例状态保存和恢复中保持不变。
应用程序可能会将此设置为false以指示片段的UI已滚动出可见性,否则对用户不可见。 这可以被系统用来区分诸如片段生命周期更新或装载器排序行为等操作的优先级。
注意:在Android N之前,有一个平台错误,可能会导致setUserVisibleHint
在提交FragmentTransaction
之前将片段带到启动状态。 由于某些应用程序依赖于此行为,因此对于声明targetSdkVersion
为23或更低的应用程序将保留该应用程序。
Parameters | |
---|---|
isVisibleToUser |
boolean : true if this fragment's UI is currently visible to the user (default), false if it is not. |
boolean shouldShowRequestPermissionRationale (String permission)
获取是否应该以请求许可的理由显示UI。 只有当您没有权限时,您才应该执行此操作,并且请求权限的上下文未明确向用户传达授予此权限的好处。
例如,如果您编写摄像头应用程序,用户就需要请求摄像头权限,并且不需要为什么要求摄像头。 然而,如果应用程序需要位置来标记照片,那么非技术精明的用户可能想知道位置如何与拍照相关。 在这种情况下,您可以选择以请求此权限的理由显示UI。
Parameters | |
---|---|
permission |
String : A permission your app wants to request. |
Returns | |
---|---|
boolean |
Whether you can show permission rationale UI. |
void startActivity (Intent intent)
从片段的Activity中调用 startActivity(Intent)
。
Parameters | |
---|---|
intent |
Intent : The intent to start. |
void startActivity (Intent intent, Bundle options)
从片段的Activity中调用 startActivity(Intent, Bundle)
。
Parameters | |
---|---|
intent |
Intent : The intent to start. |
options |
Bundle : Additional options for how the Activity should be started. See Context.startActivity(Intent, Bundle) for more details. |
void startActivityForResult (Intent intent, int requestCode)
从片段的Activity中调用 startActivityForResult(Intent, int)
。
Parameters | |
---|---|
intent |
Intent
|
requestCode |
int
|
void startActivityForResult (Intent intent, int requestCode, Bundle options)
从片段的Activity中调用 startActivityForResult(Intent, int, Bundle)
。
Parameters | |
---|---|
intent |
Intent
|
requestCode |
int
|
options |
Bundle
|
void startIntentSenderForResult (IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options)
从片段的Activity中调用 startIntentSenderForResult(IntentSender, int, Intent, int, int, int, Bundle)
。
Parameters | |
---|---|
intent |
IntentSender
|
requestCode |
int
|
fillInIntent |
Intent
|
flagsMask |
int
|
flagsValues |
int
|
extraFlags |
int
|
options |
Bundle
|
Throws | |
---|---|
IntentSender.SendIntentException |
String toString ()
返回对象的字符串表示形式。 一般来说, toString
方法返回一个“文本表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。
类Object
的toString
方法将返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @
”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Returns | |
---|---|
String |
a string representation of the object. |
void unregisterForContextMenu (View view)
防止为给定视图显示上下文菜单。 此方法将删除视图上的View.OnCreateContextMenuListener
。
Parameters | |
---|---|
view |
View : The view that should stop showing a context menu. |
也可以看看: