Most visited

Recently visited

Added in API level 11

Fragment

public class Fragment
extends Object implements ComponentCallbacks2, View.OnCreateContextMenuListener

java.lang.Object
   ↳ android.app.Fragment
Known Direct Subclasses
Known Indirect Subclasses


片段是可放置在Activity中的应用程序的用户界面或行为的Activity 与碎片的相互作用通过FragmentManager完成,可以通过Activity.getFragmentManager()Fragment.getFragmentManager()

片段类可以用许多方法来实现各种各样的结果。 在它的核心中,它代表了运行在更大的Activity内的特定操作或界面。 片段与它所处的活动密切相关,不能单独使用。 尽管Fragment定义了自己的生命周期,但生命周期依赖于它的活动:如果活动停止,它内部的任何片段都不能启动; 当活动被破坏时,所有碎片都将被销毁。

Fragment的所有子类都必须包含一个公共无参数构造函数。 框架通常会在需要时重新实例化一个片段类,特别是在状态恢复期间,并且需要能够找到这个构造器来实例化它。 如果无参数构造函数不可用,则在状态恢复期间会发生运行时异常。

涵盖的主题包括:

  1. Older Platforms
  2. Lifecycle
  3. Layout
  4. Back Stack

Developer Guides

有关使用片段的更多信息,请阅读 Fragments开发人员指南。

Older Platforms

While the Fragment API was introduced in 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.

Lifecycle

虽然片段的生命周期与其拥有的活动相关联,但它在标准活动生命周期中有其自身的缺陷。 它包含基本的活动生命周期方法,例如onResume() ,但也很重要的是与活动和UI生成的交互相关的方法。

生命周期方法的核心系列被调用以使片段恢复到恢复状态(与用户交互):

  1. onAttach(Activity) called once the fragment is associated with its activity.
  2. onCreate(Bundle) called to do initial creation of the fragment.
  3. onCreateView(LayoutInflater, ViewGroup, Bundle) creates and returns the view hierarchy associated with the fragment.
  4. onActivityCreated(Bundle) tells the fragment that its activity has completed its own Activity.onCreate().
  5. onViewStateRestored(Bundle) tells the fragment that all of the saved state of its view hierarchy has been restored.
  6. onStart() makes the fragment visible to the user (based on its containing activity being started).
  7. onResume() makes the fragment begin interacting with the user (based on its containing activity being resumed).

由于片段不再被使用,它会经历一系列相反的回调:

  1. 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.
  2. 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.
  3. onDestroyView() allows the fragment to clean up resources associated with its View.
  4. onDestroy() called to do final cleanup of the fragment's state.
  5. onDetach() called immediately prior to the fragment no longer being associated with its activity.

Layout

碎片可以用作应用程序布局的一部分,使您可以更好地模块化代码,并更轻松地将用户界面调整到正在运行的屏幕。 作为一个例子,我们可以看看一个由项目列表组成的简单程序,并显示每个项目的细节。

活动的布局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)的片段作为参数进行分析。

被实例化的片段必须具有某种唯一标识符,以便如果父活动需要被销毁和重新创建,它可以与之前的实例重新关联。 这可以通过以下方式提供:

Back Stack

片段被修改的事务可以放置在拥有活动的内部后备栈中。 当用户按下活动时,在活动本身完成之前,后退堆栈中的任何交易都会弹出。

例如,考虑这个使用整数参数实例化的简单片段,并将其显示在其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所处的任何以前的状态。

Summary

Nested classes

class Fragment.InstantiationException

发生实例化失败时由instantiate(Context, String, Bundle)抛出。

class Fragment.SavedState

通过FragmentManager.saveFragmentInstanceState从片段实例检索到的状态信息。

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()

返回提供给 setArguments(Bundle)的参数,如果有的话。

final FragmentManager getChildFragmentManager()

返回一个专用的FragmentManager,用于放置和管理这个Fragment中的碎片。

Context getContext()

返回该片段当前与之关联的 Context

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()

返回 getActivity().getResources()

final boolean getRetainInstance()
Transition getReturnTransition()

当片段准备由于弹出背堆栈而被移除,隐藏或分离时,返回将用于将视图移出场景的Transition。

Transition getSharedElementEnterTransition()

返回将用于传输到内容场景中的共享元素的转换。

Transition getSharedElementReturnTransition()

返回将在返回堆栈弹出期间传回的共享元素的转换。

final String getString(int resId, Object... formatArgs)

从应用程序包的默认字符串表中返回一个本地化的格式化字符串,替换 Formatterformat(String, Object...)定义的格式参数。

final String getString(int resId)

从应用程序包的默认字符串表中返回一个本地化的字符串。

final String getTag()

获取片段的标签名称(如果指定)。

final Fragment getTargetFragment()

返回由 setTargetFragment(Fragment, int)设置的目标片段。

final int getTargetRequestCode()

返回由 setTargetFragment(Fragment, int)设置的目标请求代码。

final CharSequence getText(int resId)

从应用程序包的默认字符串表中返回一个本地化的,风格化的CharSequence。

boolean getUserVisibleHint()
View getView()

获取片段布局的根视图(由 onCreateView(LayoutInflater, ViewGroup, Bundle)返回),如果提供。

final int hashCode()

子类不能重写hashCode()。

static Fragment instantiate(Context context, String fname)

instantiate(Context, String, Bundle)但带有空参数Bundle。

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)

接收先前调用 startActivityForResult(Intent, int)的结果。

void onAttach(Activity activity)

此方法在API级别23中已弃用。请改为使用onAttach(Context)

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)

当即将显示 view的上下文菜单时调用。

void onCreateOptionsMenu(Menu menu, MenuInflater inflater)

初始化活动标准选项菜单的内容。

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

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

void onDestroy()

当碎片不再使用时调用。

void onDestroyOptionsMenu()

当此片段的选项菜单项不再包含在总体选项菜单中时调用。

void onDestroyView()

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

void onDetach()

当片段不再附加到其活动时调用。

void onHiddenChanged(boolean hidden)

当隐藏状态(由片段的 isHidden()返回)发生变化时调用。

void onInflate(AttributeSet attrs, Bundle savedInstanceState)

此方法在API级别12中已弃用。请改为使用onInflate(Context, AttributeSet, Bundle)

void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState)

此方法在API级别23中已弃用。请改为使用onInflate(Context, AttributeSet, Bundle)

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)

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

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)

报告此片段希望通过接收对 onCreateOptionsMenu(Menu, MenuInflater)和相关方法的调用来参与填充选项菜单。

void setInitialSavedState(Fragment.SavedState state)

设置此片段应从初始构建时恢复的初始保存状态,由 FragmentManager.saveFragmentInstanceState返回。

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中调用 startActivity(Intent)

void startActivity(Intent intent, Bundle options)

从片段的Activity中调用 startActivity(Intent, Bundle)

void startActivityForResult(Intent intent, int requestCode)

从片段的Activity中调用 startActivityForResult(Intent, int)

void startActivityForResult(Intent intent, int requestCode, Bundle options)

从片段的Activity中调用 startActivityForResult(Intent, int, 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)

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

XML attributes

android:fragmentAllowEnterTransitionOverlap

设置进入和退出转换在向前转换时是否应该重叠。 对应于setAllowEnterTransitionOverlap(boolean)

必须是另一个资源的引用,其形式为“ @[+][package:]type:name ”,或者其形式为“一个主题属性 ?[package:][type:]name ”。

这对应于全局属性资源符号 fragmentAllowEnterTransitionOverlap

相关方法:

android:fragmentAllowReturnTransitionOverlap

设置由于弹出后退堆栈,转换时进入和退出转换是否应该重叠。 对应于setAllowReturnTransitionOverlap(boolean)

必须是另一个资源的引用,其形式为“ @[+][package:]type:name ”,或者其形式为“一个主题属性 ?[package:][type:]name ”。

这对应于全局属性资源符号 fragmentAllowReturnTransitionOverlap

相关方法:

android:fragmentEnterTransition

将用于将Views移动到最初场景的Transition。 对应于setEnterTransition(android.transition.Transition)

必须是对“ @[+][package:]type:name ”形式的其他资源或“ @[+][package:]type:name ”形式的主题属性的 ?[package:][type:]name

这对应于全局属性资源符号 fragmentEnterTransition

相关方法:

android:fragmentExitTransition

当片段被移除,隐藏或在未弹出后退堆栈时分离时,将用于将视图移出场景的Transition。 对应于setExitTransition(android.transition.Transition)

必须是另一个资源的引用,其形式为“ @[+][package:]type:name ”,或者其形式为“一个主题属性 ?[package:][type:]name ”。

这对应于全局属性资源符号 fragmentExitTransition

相关方法:

android:fragmentReenterTransition

由于弹出后退栈,将用于将视图移回场景的过渡。 对应于setReenterTransition(android.transition.Transition)

必须是另一个资源的引用,其形式为“ @[+][package:]type:name ”,或者其形式为“一个主题属性 ?[package:][type:]name ”。

这对应于全局属性资源符号 fragmentReenterTransition

相关方法:

android:fragmentSharedElementEnterTransition

将用于共享元素的转换转移到内容场景中。 对应于setSharedElementEnterTransition(android.transition.Transition)

必须是另一个资源的引用,其形式为“ @[+][package:]type:name ”,或者其形式为“一个主题属性 ?[package:][type:]name ”。

这对应于全局属性资源符号 fragmentSharedElementEnterTransition

相关方法:

android:fragmentSharedElementReturnTransition

用于共享元素的过渡将在返回堆栈的弹出过程中传回。 这个转变在离开片段中起作用。 对应于setSharedElementReturnTransition(android.transition.Transition)

必须是另一个资源的引用,其形式为“ @[+][package:]type:name ”,或者其形式为“一个主题属性 ?[package:][type:]name ”。

这对应于全局属性资源符号 fragmentSharedElementReturnTransition

相关方法:

Public constructors

Fragment

Added in API level 11
Fragment ()

默认的构造函数。 每个片段必须有一个空构造函数,因此可以在恢复其活动状态时实例化它。 强烈建议子类没有带参数的其他构造函数,因为这些构造函数在重新实例化时不会被调用; 相反,调用者可以使用setArguments(Bundle)提供参数,然后由片段通过getArguments()检索getArguments()

应用程序通常不应该实现构造函数。 第一个应用程序代码可以在片段准备好使用的地方运行,位于onAttach(Activity) ,片段实际上与其活动相关联的点。 某些应用程序可能也想要实现onInflate(Activity, AttributeSet, Bundle)以从布局资源中检索属性,但应该在这里谨慎处理,因为这发生在片段附加到其活动上。

Public methods

dump

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

equals

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

getActivity

Added in API level 11
Activity getActivity ()

返回此片段当前与之关联的活动。

Returns
Activity

getAllowEnterTransitionOverlap

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

getAllowReturnTransitionOverlap

Added in API level 21
boolean getAllowReturnTransitionOverlap ()

返回返回转换和重新输入转换是否重叠。 如果属实,重新进入过渡将尽快开始。 如果为false,则重新输入转换将等到返回转换完成后再开始。

相关XML属性:

Returns
boolean true to start the reenter transition when possible or false to wait until the return transition completes.

getArguments

Added in API level 11
Bundle getArguments ()

返回提供给 setArguments(Bundle)的参数(如果有的话)。

Returns
Bundle

getChildFragmentManager

Added in API level 17
FragmentManager getChildFragmentManager ()

返回一个专用的FragmentManager,用于放置和管理这个Fragment中的碎片。

Returns
FragmentManager

getContext

Added in API level 23
Context getContext ()

返回此片段当前与之关联的 Context

Returns
Context

getEnterTransition

Added in API level 21
Transition getEnterTransition ()

返回将用于将Views移动到初始场景的Transition。 进入的视图将是具有isTransitionGroup()常规Views或ViewGroup返回true的视图。 典型的转换将延伸Visibility因为输入受到从INVISIBLEVISIBLE可见性的VISIBLE

相关XML属性:

Returns
Transition the Transition to use to move Views into the initial Scene.

getExitTransition

Added in API level 21
Transition getExitTransition ()

当不弹出背堆栈时,返回将用于将视图移出场景的过渡,当片段被移除,隐藏或分离时。 退出的视图将是具有isTransitionGroup()常规Views或ViewGroup返回true的视图。 典型的转换将延伸Visibility因为退出是通过将可见性从VISIBLE更改为VISIBLEINVISIBLE 如果转换为空,视图将保持不受影响。

相关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.

getFragmentManager

Added in API level 11
FragmentManager getFragmentManager ()

返回FragmentManager以与与该片段活动关联的片段进行交互。 请注意,在从getActivity()中将片段置于FragmentTransaction之前的时间到getActivity() ,这个值非空,直到它被提交并附加到其活动。

如果此片段是另一片段的孩子,则返回的片段管理器将是父级的 getChildFragmentManager()

Returns
FragmentManager

getHost

Added in API level 23
Object getHost ()

返回这个片段的主机对象。 如果片段当前未被托管,可能会返回null

Returns
Object

getId

Added in API level 11
int getId ()

返回此片段已知的标识符。 这可以是布局中提供的android:id值,也可以是添加片段时提供的容器视图ID。

Returns
int

getLoaderManager

Added in API level 11
LoaderManager getLoaderManager ()

为这个片段返回LoaderManager,如果需要的话创建它。

Returns
LoaderManager

getParentFragment

Added in API level 17
Fragment getParentFragment ()

返回包含此片段的父片段。 如果此片段直接附加到Activity,则返回null。

Returns
Fragment

getReenterTransition

Added in API level 21
Transition getReenterTransition ()

返回由于弹出背堆栈而返回的视图,以便将视图移动到场景中。 进入的视图将是那些具有isTransitionGroup()常规Views或ViewGroup返回true。 典型的转换将延伸Visibility因为退出是通过将可见性从VISIBLE更改为VISIBLEINVISIBLE 如果转换为空,视图将保持不受影响。 如果没有设置,默认将使用与setExitTransition(android.transition.Transition)相同的转换。

相关XML属性:

Returns
Transition the Transition to use to move Views into the scene when reentering from a previously-started Activity.

getResources

Added in API level 11
Resources getResources ()

退货 getActivity().getResources()

Returns
Resources

getRetainInstance

Added in API level 11
boolean getRetainInstance ()

Returns
boolean

getReturnTransition

Added in API level 21
Transition getReturnTransition ()

当片段准备由于弹出背堆栈而被移除,隐藏或分离时,返回将用于将视图移出场景的Transition。 退出的视图将是具有isTransitionGroup()常规Views或ViewGroup返回true。 典型的转换将延伸Visibility因为输入受到从VISIBLEINVISIBLE可见性的INVISIBLE 如果transition为空,则输入视图将保持不受影响。

相关XML属性:

Returns
Transition the Transition to use to move Views out of the Scene when the Fragment is preparing to close.

getSharedElementEnterTransition

Added in API level 21
Transition getSharedElementEnterTransition ()

返回将用于传输到内容场景中的共享元素的转换。 典型的转换会影响大小和位置,例如ChangeBounds 空值将导致转移的共享元素闪烁到最终位置。

相关XML属性:

Returns
Transition The Transition to use for shared elements transferred into the content Scene.

getSharedElementReturnTransition

Added in API level 21
Transition getSharedElementReturnTransition ()

返回将在返回堆栈弹出期间传回的共享元素的转换。 这个转变在离开片段中起作用。 典型的转换会影响大小和位置,例如ChangeBounds 空值将导致转移的共享元素闪烁到最终位置。 如果未设置任何值,则默认值将使用与setSharedElementEnterTransition(android.transition.Transition)相同的值。

相关XML属性:

Returns
Transition The Transition to use for shared elements transferred out of the content Scene.

getString

Added in API level 11
String getString (int resId, 
                Object... formatArgs)

从应用程序包的默认字符串表中返回一个本地化的格式化字符串,替换 Formatterformat(String, Object...)定义的格式参数。

Parameters
resId int: Resource id for the format string
formatArgs Object: The format arguments that will be used for substitution.
Returns
String

getString

Added in API level 11
String getString (int resId)

从应用程序包的默认字符串表中返回一个本地化的字符串。

Parameters
resId int: Resource id for the string
Returns
String

getTag

Added in API level 11
String getTag ()

获取片段的标签名称(如果指定)。

Returns
String

getTargetFragment

Added in API level 11
Fragment getTargetFragment ()

返回由 setTargetFragment(Fragment, int)设置的目标片段。

Returns
Fragment

getTargetRequestCode

Added in API level 11
int getTargetRequestCode ()

返回由 setTargetFragment(Fragment, int)设置的目标请求代码。

Returns
int

getText

Added in API level 11
CharSequence getText (int resId)

从应用程序包的默认字符串表中返回一个本地化的,风格化的CharSequence。

Parameters
resId int: Resource id for the CharSequence text
Returns
CharSequence

getUserVisibleHint

Added in API level 15
boolean getUserVisibleHint ()

Returns
boolean The current value of the user-visible hint on this fragment.

也可以看看:

getView

Added in API level 11
View getView ()

如果提供,获取片段布局的根视图(由 onCreateView(LayoutInflater, ViewGroup, Bundle)返回的 onCreateView(LayoutInflater, ViewGroup, Bundle) )。

Returns
View The fragment's root view, or null if it has no layout.

hashCode

Added in API level 11
int hashCode ()

子类不能重写hashCode()。

Returns
int a hash code value for this object.

instantiate

Added in API level 11
Fragment instantiate (Context context, 
                String fname)

instantiate(Context, String, Bundle)但带有空参数Bundle。

Parameters
context Context
fname String
Returns
Fragment

instantiate

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

isAdded

Added in API level 11
boolean isAdded ()

如果片段当前被添加到其活动中,则返回true。

Returns
boolean

isDetached

Added in API level 13
boolean isDetached ()

如果片段已从UI中明确分离,则返回true。 也就是说,已经使用了FragmentTransaction.detach(Fragment)

Returns
boolean

isHidden

Added in API level 11
boolean isHidden ()

如果片段已隐藏,则返回true。 默认显示片段。 您可以通过onHiddenChanged(boolean)了解有关此状态的onHiddenChanged(boolean) 请注意,隐藏状态与其他状态正交 - 也就是说,要让用户看到,片段必须同时启动而不是隐藏。

Returns
boolean

isInLayout

Added in API level 11
boolean isInLayout ()

如果通过<fragment>标签将布局作为活动视图层次结构的一部分包含在内,则返回true。 当通过<fragment>标签创建片段时, 除非旧片段从先前状态恢复并且不出现在当前状态的布局中, 否则这将始终为真。

Returns
boolean

isRemoving

Added in API level 11
boolean isRemoving ()

如果此片段当前正从其活动中移除,则返回true。 不是它的活动是否完成,而是它是否正在从其活动中移除。

Returns
boolean

isResumed

Added in API level 11
boolean isResumed ()

如果片段处于恢复状态,则返回true。 对于onResume()onPause()也是如此。

Returns
boolean

isVisible

Added in API level 11
boolean isVisible ()

如果片段当前对用户可见,则返回true。 这意味着:(1)已被添加,(2)将其视图附加到窗口,并且(3)不被隐藏。

Returns
boolean

onActivityCreated

Added in API level 11
void onActivityCreated (Bundle savedInstanceState)

当片段的活动已经创建并且该片段的视图层次被实例化时调用。 一旦这些部分到位,它就可以用来进行最终的初始化,例如检索视图或恢复状态。 对于使用setRetainInstance(boolean)来保留其实例的片段也很有用,因为此回调告诉片段何时与新活动实例完全关联。 这是在onCreateView(LayoutInflater, ViewGroup, Bundle)之后和onViewStateRestored(Bundle)之前onViewStateRestored(Bundle)

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

onActivityResult

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

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

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

onAttach

Added in API level 11
void onAttach (Activity activity)

此方法在API级别23中已弃用。
改为使用onAttach(Context)

Parameters
activity Activity

onAttach

Added in API level 23
void onAttach (Context context)

当片段首次附加到其上下文时调用。 onCreate(Bundle)将调用onCreate(Bundle)

Parameters
context Context

onAttachFragment

Added in API level 24
void onAttachFragment (Fragment childFragment)

当片段附加为此片段的子元素时调用。

如果片段还没有先前调用 onCreate则在附加片段的 onAttach和附加片段的 onCreate之前调用 onCreate

Parameters
childFragment Fragment: child fragment being attached

onConfigurationChanged

Added in API level 11
void onConfigurationChanged (Configuration newConfig)

设备配置在组件运行时发生更改时由系统调用。 请注意,与活动不同,当配置更改时,其他组件不会重新启动:它们必须始终处理更改的结果,例如通过重新获取资源。

在调用此函数时,您的Resources对象将被更新为返回与新配置相匹配的资源值。

有关更多信息,请阅读 Handling Runtime Changes

Parameters
newConfig Configuration: The new device configuration.

onContextItemSelected

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

onCreate

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

onCreateAnimator

Added in API level 11
Animator onCreateAnimator (int transit, 
                boolean enter, 
                int nextAnim)

当片段加载动画时调用。

Parameters
transit int
enter boolean
nextAnim int
Returns
Animator

onCreateContextMenu

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

onCreateOptionsMenu

Added in API level 11
void onCreateOptionsMenu (Menu menu, 
                MenuInflater inflater)

初始化活动标准选项菜单的内容。 您应该将菜单项放入菜单中 要调用此方法,您必须首先调用setHasOptionsMenu(boolean) 有关更多信息,请参阅Activity.onCreateOptionsMenu

Parameters
menu Menu: The options menu in which you place your items.
inflater MenuInflater

也可以看看:

onCreateView

Added in API level 11
View onCreateView (LayoutInflater inflater, 
                ViewGroup container, 
                Bundle savedInstanceState)

调用以使片段实例化其用户界面视图。 这是可选的,非图形片段可以返回null(这是默认实现)。 这将在onCreate(Bundle)onActivityCreated(Bundle)之间onActivityCreated(Bundle)

如果你从这里返回一个视图,那么当视图被释放时,你将在以后被调用 onDestroyView()

Parameters
inflater LayoutInflater: The LayoutInflater object that can be used to inflate any views in the fragment,
container ViewGroup: If non-null, this is the parent view that the fragment's UI should be attached to. The fragment should not add the view itself, but this can be used to generate the LayoutParams of the view.
savedInstanceState Bundle: If non-null, this fragment is being re-constructed from a previous saved state as given here.
Returns
View Return the View for the fragment's UI, or null.

onDestroy

Added in API level 11
void onDestroy ()

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

onDestroyOptionsMenu

Added in API level 11
void onDestroyOptionsMenu ()

当此片段的选项菜单项不再包含在总体选项菜单中时调用。 接收此调用意味着菜单需要重新构建,但是此片段的项目未包含在新建的菜单中(未调用其onCreateOptionsMenu(Menu, MenuInflater) )。

onDestroyView

Added in API level 11
void onDestroyView ()

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

onDetach

Added in API level 11
void onDetach ()

当片段不再附加到其活动时调用。 这在onDestroy()之后onDestroy() ,除非在重新创建Activity(参见setRetainInstance(boolean) )时保留片段实例,在这种情况下,它将在onStop()之后onStop()

onHiddenChanged

Added in API level 11
void onHiddenChanged (boolean hidden)

当隐藏状态(由片段的 isHidden()返回)发生变化时调用片段开始不隐藏;片段从该状态改变状态时将被调用。

Parameters
hidden boolean: True if the fragment is now hidden, false if it is not visible.

onInflate

Added in API level 11
void onInflate (AttributeSet attrs, 
                Bundle savedInstanceState)

此方法在API级别12中已被弃用。
改为使用onInflate(Context, AttributeSet, Bundle)

Parameters
attrs AttributeSet
savedInstanceState Bundle

onInflate

Added in API level 12
void onInflate (Activity activity, 
                AttributeSet attrs, 
                Bundle savedInstanceState)

此方法在API级别23中已弃用。
改为使用onInflate(Context, AttributeSet, Bundle)

Parameters
activity Activity
attrs AttributeSet
savedInstanceState Bundle

onInflate

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

onLowMemory

Added in API level 11
void onLowMemory ()

这在整个系统内存不足时调用,并且主动运行的进程应该修剪内存使用情况。 虽然没有定义它的确切位置,但通常会在所有后台进程都被终止时发生。 也就是说,在达到托管服务和前台UI的杀死进程之前,我们希望避免杀死。

你应该实现这个方法来释放你可能持有的任何缓存或其他不必要的资源。 系统将从此方法返回后为您执行垃圾回收。

优选地,您应该从ComponentCallbacks2实施onTrimMemory(int) ,以基于不同级别的内存需求递增地卸载资源。 该API可用于API级别14和更高的,所以你应该只使用这个onLowMemory()方法,旧版本的回退,可以治疗一样onTrimMemory(int)TRIM_MEMORY_COMPLETE水平。

onMultiWindowModeChanged

Added in API level 24
void onMultiWindowModeChanged (boolean isInMultiWindowMode)

当片段的活动从全屏模式更改为多窗口模式时调用,反之亦然。 这通常与包含Activity的onMultiWindowModeChanged(boolean)相关联。

Parameters
isInMultiWindowMode boolean: True if the activity is in multi-window mode.

onOptionsItemSelected

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

也可以看看:

onOptionsMenuClosed

Added in API level 11
void onOptionsMenuClosed (Menu menu)

只要选项菜单被关闭(通过用户使用后退/菜单按钮取消菜单,或选择某个项目时),就会调用该钩子。

Parameters
menu Menu: The options menu as last shown or first initialized by onCreateOptionsMenu().

onPause

Added in API level 11
void onPause ()

当碎片不再恢复时调用。 这通常与包含Activity的生命周期的Activity.onPause相关联。

onPictureInPictureModeChanged

Added in API level 24
void onPictureInPictureModeChanged (boolean isInPictureInPictureMode)

当活动从画中画模式切换到画中画模式时由系统调用。 这通常与包含Activity的onPictureInPictureModeChanged(boolean)相关联。

Parameters
isInPictureInPictureMode boolean: True if the activity is in picture-in-picture mode.

onPrepareOptionsMenu

Added in API level 11
void onPrepareOptionsMenu (Menu menu)

准备显示屏幕的标准选项菜单。 在菜单显示之前,每当显示菜单时都会调用它。 您可以使用此方法高效地启用/禁用项目或以其他方式动态修改内容。 有关更多信息,请参阅Activity.onPrepareOptionsMenu

Parameters
menu Menu: The options menu as last shown or first initialized by onCreateOptionsMenu().

也可以看看:

onRequestPermissionsResult

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

也可以看看:

onResume

Added in API level 11
void onResume ()

当片段对用户可见且正在积极运行时调用。 这通常与包含Activity的生命周期的Activity.onResume相关联。

onSaveInstanceState

Added in API level 11
void onSaveInstanceState (Bundle outState)

打电话询问片段以保存其当前的动态状态,以便稍后可以在重新启动其进程的新实例时重新构建它。 如果片段的新实例后需要创建,您的包放在这里的数据将提供给包可onCreate(Bundle)onCreateView(LayoutInflater, ViewGroup, Bundle) ,并onActivityCreated(Bundle)

这相当于Activity.onSaveInstanceState(Bundle) ,这里的大多数讨论也适用于此。 但请注意: 此方法可能在onDestroy()之前的任何时间被调用 有很多情况下,碎片可能大部分被拆除(例如,当放置在背堆栈上而没有UI显示时),但是它的状态不会被保存直到其拥有的活动实际上需要保存其状态。

Parameters
outState Bundle: Bundle in which to place your saved state.

onStart

Added in API level 11
void onStart ()

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

onStop

Added in API level 11
void onStop ()

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

onTrimMemory

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

onViewCreated

Added in API level 13
void onViewCreated (View view, 
                Bundle savedInstanceState)

onCreateView(LayoutInflater, ViewGroup, Bundle)已返回之后立即调用,但在任何已保存状态已恢复到视图之前调用。 这让子类有机会在知道其视图层次已完全创建后自行初始化。 此时片段的视图层次不会附加到其父项。

Parameters
view View: The View returned by onCreateView(LayoutInflater, ViewGroup, Bundle).
savedInstanceState Bundle: If non-null, this fragment is being re-constructed from a previous saved state as given here.

onViewStateRestored

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

registerForContextMenu

Added in API level 11
void registerForContextMenu (View view)

为给定视图注册一个上下文菜单(多个视图可以显示上下文菜单)。 此方法将在视图上设置View.OnCreateContextMenuListener ,因此在显示上下文菜单时将调用onCreateContextMenu(ContextMenu, View, ContextMenuInfo)

Parameters
view View: The view that should show a context menu.

也可以看看:

requestPermissions

Added in API level 23
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,以决定应用程序是否仍可拥有这些权限。 如果您的应用程序使用受权限保护的数据的方式发生显着变化,这会非常有用。

如果你的活动设置,您不能要求一个权限 noHistorytrue ,因为在这种情况下活动不会接受结果的回调,包括 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.

也可以看看:

setAllowEnterTransitionOverlap

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

setAllowReturnTransitionOverlap

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

setArguments

Added in API level 11
void setArguments (Bundle args)

为此片段提供构造参数。 这只能在片段附加到其活动之前调用; 也就是说,您应该在构建片段后立即调用它。 这里提供的参数将在片段销毁和创建时保留。

Parameters
args Bundle

setEnterSharedElementCallback

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

setEnterTransition

Added in API level 21
void setEnterTransition (Transition transition)

设置将用于将Views移动到初始场景的Transition。 进入的视图将是那些具有isTransitionGroup()常规Views或ViewGroup返回true。 典型的转换将延伸Visibility因为进入受到从INVISIBLEVISIBLE可见性的VISIBLE 如果transition为空,则输入视图将不受影响。

相关XML属性:

Parameters
transition Transition: The Transition to use to move Views into the initial Scene.

setExitSharedElementCallback

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

setExitTransition

Added in API level 21
void setExitTransition (Transition transition)

设置当片段被移除,隐藏或在未弹出背堆栈时分离时将用于将视图移出场景的Transition。 退出的视图将是具有isTransitionGroup()常规Views或ViewGroup返回true。 典型的转换将延长Visibility因为退出受到从VISIBLEINVISIBLE可见性的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.

setHasOptionsMenu

Added in API level 11
void setHasOptionsMenu (boolean hasMenu)

报告此片段希望通过接收对 onCreateOptionsMenu(Menu, MenuInflater)和相关方法的调用来参与填充选项菜单。

Parameters
hasMenu boolean: If true, the fragment has menu items to contribute.

setInitialSavedState

Added in API level 13
void setInitialSavedState (Fragment.SavedState state)

设置此片段应该从第一次构建时恢复的初始保存状态,由 FragmentManager.saveFragmentInstanceState返回。

Parameters
state Fragment.SavedState: The state the fragment should be restored from.

setMenuVisibility

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

setReenterTransition

Added in API level 21
void setReenterTransition (Transition transition)

设置用于在由于弹出背堆栈而返回时将Views移动到场景中的Transition。 进入的视图将是那些具有isTransitionGroup()常规Views或ViewGroup返回true。 典型转换将延长Visibility因为退出受VISIBLEINVISIBLE可见性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.

setRetainInstance

Added in API level 11
void setRetainInstance (boolean retain)

控制是否在重新创建Activity时(例如从配置更改)保留片段实例。 这只能用于不在后端堆栈中的碎片。 如果设置,则在重新创建活动时,片段生命周期将略有不同:

Parameters
retain boolean

setReturnTransition

Added in API level 21
void setReturnTransition (Transition transition)

设置当片段准备由于弹出背堆栈而被移除,隐藏或分离时将用于将视图移出场景的Transition。 退出的视图将是具有isTransitionGroup()常规Views或ViewGroup返回true的视图。 典型的转换将延伸Visibility因为输入受到从VISIBLEINVISIBLE可见性的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.

setSharedElementEnterTransition

Added in API level 21
void setSharedElementEnterTransition (Transition transition)

设置将用于共享元素转移到内容场景的转换。 典型的转换会影响大小和位置,例如ChangeBounds 空值将导致转移的共享元素闪烁到最终位置。

相关XML属性:

Parameters
transition Transition: The Transition to use for shared elements transferred into the content Scene.

setSharedElementReturnTransition

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

setTargetFragment

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

setUserVisibleHint

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

shouldShowRequestPermissionRationale

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

也可以看看:

startActivity

Added in API level 11
void startActivity (Intent intent)

从片段的Activity中调用 startActivity(Intent)

Parameters
intent Intent: The intent to start.

startActivity

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

startActivityForResult

Added in API level 11
void startActivityForResult (Intent intent, 
                int requestCode)

从片段的Activity中调用 startActivityForResult(Intent, int)

Parameters
intent Intent
requestCode int

startActivityForResult

Added in API level 16
void startActivityForResult (Intent intent, 
                int requestCode, 
                Bundle options)

从片段的Activity中调用 startActivityForResult(Intent, int, Bundle)

Parameters
intent Intent
requestCode int
options Bundle

startIntentSenderForResult

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

toString

Added in API level 11
String toString ()

返回对象的字符串表示形式。 一般来说, toString方法返回一个“文本表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。

ObjecttoString方法将返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @ ”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
 

Returns
String a string representation of the object.

unregisterForContextMenu

Added in API level 11
void unregisterForContextMenu (View view)

防止为给定视图显示上下文菜单。 此方法将删除视图上的View.OnCreateContextMenuListener

Parameters
view View: The view that should stop showing a context menu.

也可以看看:

Hooray!