理论
使用 中的addToBackStack(tag: String): FragmentTransaction
方法FragmentTransaction
来标记要返回的点。此方法FragmentTransaction
仅返回链能力的实例。
然后popBackStackImmediate(tag: String, flag: int): void
使用FragmentManager
. 标签是您之前指定的。该标志要么是POP_BACK_STACK_INCLUSIVE
包含标记的事务的常量,要么是0
。
例子
下面是一个带有以下布局的示例,该布局具有一个FrameLayout
带有 idcontent_frame
的片段被加载到的位置。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<FrameLayout
android:id="@+id/content_frame"
android:layout_below="@id/textView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
下面的代码在用 id 替换布局元素的内容时通过片段类名标记片段content_frame
。
public void loadFragment(final Fragment fragment) {
// create a transaction for transition here
final FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
// put the fragment in place
transaction.replace(R.id.content_frame, fragment);
// this is the part that will cause a fragment to be added to backstack,
// this way we can return to it at any time using this tag
transaction.addToBackStack(fragment.getClass().getName());
transaction.commit();
}
为了完成这个例子,一个方法允许您在加载时使用标签返回到完全相同的片段。
public void backToFragment(final Fragment fragment) {
// go back to something that was added to the backstack
getSupportFragmentManager().popBackStackImmediate(
fragment.getClass().getName(), 0);
// use 0 or the below constant as flag parameter
// FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
当真正实现这一点时,您可能希望在片段参数上添加一个空检查;-)。