Android Fragment——管理Fragment
来源:互联网 发布:mysql cast 编辑:程序博客网 时间:2024/06/06 02:28
FragmentManager对象能够做以下事情:
1. 获得Activity中已有的Fragment,用findFragmentById()获得Activity布局中提供UI的Fragment,或用findFragmentByTag()方法获得没有提供UI的Fragment;
2. 使用popBackStack()方法从回退堆栈中弹出Fragment,类似用户的回退命令;
3. 用addOnBackStackChangedListener()给回退堆栈的改变注册一个监听器。
关于这些方法的更多信息,可以参照FragmentManager类文档。
像前面章节中介绍的那样,你也能使用FragmentManager来打开一个FragmentTransaction对象,以便执行诸如添加和删除Fragment等事务。
在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 transactionFragment 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 stacktransaction.replace(R.id.fragment_container, newFragment);transaction.addToBackStack(null);// Commit the transactiontransaction.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()方法,你丢失的提交就没问题了。
- Android Fragment——管理Fragment
- Android Fragment---管理Fragment
- Android Fragment---管理Fragment
- Android Fragment——创建Fragment
- Android Fragment——处理Fragment生命周期
- android Fragment 状态管理
- Android Fragment管理
- android Fragments:管理fragment
- Android——Fragment
- Android ——fragment
- Android—Fragment生命周期
- Android—viewpage+Fragment
- Android基础—Fragment
- Android Fragment详解(四):管理Fragment
- Android Fragment详解(四):管理Fragment
- Android Fragment详解(四):管理Fragment
- Android Fragment详解(四):管理Fragment
- Android Fragment详解(四):管理Fragment
- ARM调用规范
- android搭建环境错误 daemon not running. starting it now on port 5037 ADB server didn't ACK
- Windows Server 2012,无法使用Windows Photo Viewer的解决方案
- 数据结构与算法练习Java版练习1.4
- NSIS DerectUI 皮肤插件 免费使用!!支持异性,动画!!
- Android Fragment——管理Fragment
- Rabbitmq学习整理1
- chrome使用技巧
- CentOS下使用VIM打造C/C++开发环境
- leetcode 235 Lowest Common Ancestor of a Binary Search Tree(难易度:Easy)
- iPad开发第一天
- 多线程编程1-NSThread
- 【Material Design视觉设计语言】UI组件设计(七):网格
- 题目:编写一个程序,创建一个单链表,需要完成以下要求 1. 用户输入一组整数,以0作为结束标志,将这一组整数存放在链表中(0不存放),并打印该链表中的值。 2. 删除第5个元素,并打印删除后的结