在Activity中使用有关Fragment的添加、删除、替换以及用它们执行其他响应用户交互行为的能力是一项伟大的功能。你提交给Activity的每组改变集合被叫做一个事务,并且你能使用FragmentTransaction中APIs来执行它。也能够把每个事务保存到被Activity管理的回退堆栈中,并允许用户通过Fragment改变来向后导航(类似同Activity的向后导航)。
你能够从FragmentManager对象中获取一个FragmentTransaction对象的实例,例如:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
每个事务是一组想要同时执行的改变,你能够使用诸如add()、remove()和replace()方法把想要在一个事务中执行的所有改变组合到一起,然后,调用commit()方法,把事务的执行结果反映到Activity中。
但是,在调用commit()方法之前,为了把事务添加到Fragment事务的回退堆栈,你可能要调用addToBackStack()方法。这个回退堆栈被Activity管理,并且允许用户通过按返回按钮返回到先前的Fragment状态。
下例说明了怎样用另一个Fragment替换当前的Fragment,并且在回退堆栈中保留这个Fragment的当前状态。
// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
在这个例子中,newFragment替换了在布局容器中被R.id.fragment_container ID标识的任何当前Fragment。通过调用addToBackStack()方法,替换事务被保存到回退堆栈中,以便用户能够反转事务,并且能够通过按回退按钮返回到前一个Fragment。
如果给事务添加多个改变(如用add()或remove()方法),并且调用了addToBackStack()方法,那么所有这些改变在调用commit()方法之前,都会作为一个单一的事务被添加到回退堆栈中,并且案返回按钮时,所有这些改变将会被恢复。
除了以下两种情况之外,添加到FragmentTransaction的改变顺序无关紧要:
1.最后必须调用commit()方法;
2.如果给同一个容器添加了多个Fragment,那么添加的顺序决定了它们在View层次树中显示顺序。
在你执行删除Fragment的事务时,如果没有调用addToBackStack()方法,那么Fragment将会在事务被提交时销毁,并且用户不能再向后导航。因此,在删除Fragment时,如果调用了addToBackStack()方法,那么这个Fragment就会被终止,并且用户向后导航时将会被恢复。
提示:对于每个Fragment事务,你能够在提交之前通过调用setTransition()方法,申请一个过渡动画。
调用commit()方法并不立即执行这个事务,而是在Activity的UI线程之上(”main”线程)调度运行,以便这个线程能够尽快执行这个事务。但是,如果需要,可以调用来自UI线程的executePendingTransactions()方法,直接执行被commit()方法提交的事务。通常直到事务依赖其他线程的工作时才需要这样做。
警告:你能够使用commit()方法提交一个只保存之前Activity状态的事务(在用户离开Activity时)。如果试图在用户离开Activity之后提交,将会发生一个异常。这是因为如果Activity需要被恢复,而提交之后的状态却丢失了。这种情况下,使用commitAllowingStateLoss()方法,你丢失的提交就没问题了。
注:本人转载系个人觉得翻译的很好,值得收藏,且自己回头看着方便。
如有兴趣请访问作者官方博客http://blog.csdn.net/FireOfSta
分享到:
相关推荐
- 提交事务后,系统会在合适的时机(如下一个主线程消息循环)执行实际的Fragment操作,因此立即看到变化可能需要一点时间。 通过理解并掌握FragmentTransaction,开发者可以更有效地构建动态、交互性强的Android...
例如,使用`beginTransaction()`开始一个事务,然后调用`add()`, `replace()`, 或 `remove()`来执行相应的操作,并通过`commit()`提交这些变更。 要添加切换动画,我们需要在`FragmentTransaction`中调用`...
FragmentTransaction是FragmentManager用于执行对Fragment操作的类,它允许我们对一系列操作进行组合并提交到事务中。当用户在应用中进行前进和后退操作时,Fragment会按照一定的堆栈顺序进行管理,这个堆栈被称为...
- 使用`setCustomAnimation()`方法也可以在事务中指定动画,这在管理Fragment事务时非常方便。 2. 共享元素动画: - 共享元素动画需要在启动新Fragment时使用`FragmentTransaction`的`setSharedElementTransition...
在Android开发中,片段(Fragment)是应用程序界面的重要组成部分,特别是在设计适应多种屏幕尺寸和配置的应用时。"android-fragment-demo"项目是一个很好的起点,它展示了如何在Android应用中使用和管理片段。以下...
在Android开发中,Fragment是应用程序界面的一个模块化组件,它可以在Activity中承载用户界面部分,使得开发者能够构建更复杂、可重用的布局。"Android代码-安卓原生Fragment演示"是一个项目,专注于展示如何在...
通过`FragmentManager`和`FragmentTransaction`,我们可以执行Fragment的添加、替换、移除等操作。注意,这些操作需要在主线程之外(如`onCreate()`或`onResume()`)进行,否则会抛出异常。 Fragment间通信是一个...
理解这些方法的执行顺序对于正确管理和更新Fragment内的UI至关重要。 2. **添加Fragment**:通常通过Transaction对象来添加、替换或移除Fragment。例如,使用FragmentManager的beginTransaction()方法创建一个事务...
在Android应用开发中,Fragment是Android SDK提供的一种组件,它允许开发者在单个Activity中创建多个可重用的UI块。Fragment动态加载是一项关键技能,它使得应用可以根据用户交互或特定条件灵活地添加、移除或替换...
7. **FragmentTransaction**:FragmentManager的一个实例方法,用于执行Fragment的事务操作,如add(), replace(), remove()等。 8. **生命周期回调**:Fragment拥有与Activity类似的生命周期,包括onStart(), ...
10. **FragmentTransaction的最佳实践**:为了避免内存泄漏和不必要的UI更新,应当在主线程之外执行FragmentTransaction,并在适当的时候调用`FragmentTransaction.remove()`来释放不再使用的Fragment。 总的来说,...
- 使用FragmentManager的addToBackStack()方法将Fragment事务添加到回退栈,允许用户通过按返回键撤销操作。 8. **动态加载Fragment** - 在运行时根据需求加载Fragment,这可以提高应用的灵活性和性能,特别是当...
通过调用beginTransaction()创建一个事务,然后执行相应的操作(如add(), remove(), replace()),最后提交事务(commit())。 **Fragment的使用场景:** 1. **TabLayout**:在TabLayout中,每个Tab通常对应一个...
通过调用`beginTransaction()`开始一个事务,然后添加、替换或移除Fragment,最后调用`commit()`提交事务。记得在添加Fragment到回退栈时调用`addToBackStack()`。 6. **导航组件(Navigation Component)**: ...
最后,提交事务以执行这些操作。 6. **保存和恢复状态**:为了确保Fragment的状态在切换后仍能保持,需要在Fragment中重写onSaveInstanceState()方法来保存关键数据,而在onCreateView()或onActivityCreated()中...
4. **管理Fragment事务**:在Button的点击事件回调中,我们需要使用FragmentManager进行Fragment的添加、替换或隐藏操作。FragmentManager提供了beginTransaction()方法来开始一个事务,然后通过add()、replace()或...
- **FragmentTransaction**: 用于对Fragment进行操作的事务,比如add、replace、remove等。 - **Lifecycle**: Fragment有自己的生命周期,包括onAttach(), onCreate(), onCreateView(), onViewCreated(), onStart(),...
在Android应用开发中,Fragment是UI组件的一种,它允许开发者在一个Activity中展示多个相互独立的视图。在大型复杂的应用中,尤其是那些需要在不同视图间切换的场景,如底部导航栏,Fragment的使用非常常见。本话题...
在Android应用开发中,Fragment是UI组件的重要组成部分,它允许我们构建可重用的模块化界面,尤其是在处理大型屏幕如平板电脑时更为重要。Fragment可以独立于Activity存在,并且可以在Activity的不同部分展示,增强...
需要注意的是,`Fragment.replace()`并不总是立即执行,而是作为一个事务保存在内存中,直到调用`commit()`后,系统才会开始执行替换操作。因此,如果在事务中进行了一系列的Fragment操作,可以使用`commitNow()`来...