- FragmentManager
使用FragmentManager管理Activity中的fragments,调用Activity中的getFragmentManager()方法。
因为FragmentManager的API是在Android 3.0,也即API level 11开始引入的,所以兼容之前的版本,需要使用support library中的FragmentActivity,并且使用getSupportFragmentManager()方法。
得到Activity中存在的fragment:使用findFragmentById()或findFragmentByTag()方法。
popBackStack():将back stack中最后一次的fragment转换弹出。如果没有可以出栈的东西,返回false。
这个函数是异步的:它将弹出栈的请求加入队列,但是这个动作直到应用回到事件循环才会执行。
为back stack加上监听器:addOnBackStackChangedListener()
- Performing Fragment Transactions
使用Fragment时,可以通过用户交互来执行一些动作,比如增加、移除、替换等。所有这些改变构成一个集合,这个集合被叫做一个transaction。
可以调用FragmentTransaction中的方法来处理这个transaction,并且可以将transaction存进由activity管理的back stack中,这样用户就可以进行fragment变化的回退操作。
可以这样得到FragmentTransaction类的实例:
FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
每个transaction是一组同时执行的变化的集合。
用add(), remove(), replace()方法,把所有需要的变化加进去,然后调用commit()方法,将这些变化应用。
在commit()方法之前,你可以调用addToBackStack(),把这个transaction加入back stack中去,这个back stack是由activity管理的,当用户按返回键时,就会回到上一个fragment的状态。
比如下面的代码就是用一个新的fragment取代之前的fragment,并且将前次的状态存储在back stack中。
// 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容器中的fragment,如果没有,将直接添加新的fragment。
通过调用addToBackStack(),commit()的一系列转换作为一个transaction被存储在back stack中,用户按Back键可以返回上一个转换前的状态。
当你移除一个fragment的时候,如果commit()之前没有调用addToBackStack(),那个fragment将会是destroyed;如果调用了addToBackStack(),这个fragment会是stopped,可以通过返回键来恢复。
如果添加多个变化到事务(例如add()或remove())并调用addToBackStack(), 然后在你调用commit()之前的所有应用的变化会被作为一个单个事务添加到后台堆栈, BACK按键会将它们一起回退.
关于commit()方法
调用commit()方法并不能立即执行transaction中包含的改变动作,commit()方法把transaction加入activity的UI线程队列中。
但是,如果觉得有必要的话,可以调用executePendingTransactions()方法来立即执行commit()提供的transaction。
这样做通常是没有必要的,除非这个transaction被其他线程依赖。
注意:你只能在activity存储它的状态(当用户要离开activity时)之前调用commit(),如果在存储状态之后调用commit(),将会抛出一个异常。
这是因为当activity再次被恢复时commit之后的状态将丢失。如果丢失也没关系,那么使用commitAllowingStateLoss()方法。
- 必须最后调用 commit().
- 如果添加多个fragment到同一个容器, 那么添加的顺序决定了它们在view hierarchy中显示的顺序.
相关推荐
3. **碎片管理(Fragment Management)**: 在多屏幕适配和复杂布局设计中,`Fragment`是一个常用工具。在"猎豹"快切App"中,可能使用了多个`Fragment`来构建不同的功能区域,通过`FragmentManager`进行添加、删除...
标题 "A back-end management system based on SpringBoot+Vue3" 提供了项目的关键技术栈,即后端管理系统是建立在SpringBoot框架之上,并且前端采用了Vue3。这表明这是一个结合了现代Java微服务架构和最新...
6. **布局管理(Layout Management)**:在Android应用中,需要合理地组织和管理UI元素的布局。在这里,可能包括使用RelativeLayout、LinearLayout或者ConstraintLayout等布局来构建各个页面。 7. **事件监听**:在...
5. **布局管理(Layout Management)**: 在DEMO中,底部菜单的布局可能使用了`CoordinatorLayout`或`FrameLayout`等容器来管理`BottomNavigationView`和上面显示的Fragment。`CoordinatorLayout`可以配合`...
应用的用户界面通常由Activity和Fragment组成,它们分别负责主屏幕和各个功能模块的展示。使用Android的布局组件如LinearLayout、RelativeLayout或ConstraintLayout构建界面,并通过XML定义布局结构。此外,Adapter...
5. **布局管理(Layout Management)**: 界面的滑动切换通常需要合适的布局管理器来排列和组织`View`。例如,`LinearLayout`, `RelativeLayout`, 或`ConstraintLayout`等布局可以根据需求调整`View`的位置,配合...
c++ wince sdk AI <br>smartphone版本 和windows版本 <br>目录 Table of content I. Introduction....................................................................................................
2. **布局管理(Layout Management)**:为了实现导航页的布局,可能使用了LinearLayout、RelativeLayout、ConstraintLayout等布局。特别是ConstraintLayout,它允许开发者在界面上创建复杂的布局,同时支持动画效果...
10. **LifeCycle Management(生命周期管理)**:在使用ViewPager和Fragment时,了解并正确处理Fragment的生命周期是非常重要的,尤其是在内存有限的移动设备上。 11. **Testing(测试)**:对于这样的用户引导,...
【文件名称列表】中的"events-management-app-master"可能表示这是一个Git仓库的主分支,通常包含应用程序的全部源代码、资源文件、配置文件以及版本控制信息。开发者可以通过这个文件来克隆项目,然后在本地环境中...
2. **布局管理(Layout Management)** - Android提供了多种布局管理器,如LinearLayout、RelativeLayout、ConstraintLayout等。源码中会使用这些布局来组织UI元素,实现屏幕适配和响应式设计。 3. **数据存储** ...
由于`MyDateTimePickerDialog`是`Fragment`的一个实例,它遵循Fragment的生命周期。了解何时创建、显示、隐藏和销毁对话框,以及如何正确处理配置变更(如屏幕旋转),对于确保代码的健壮性至关重要。 8. **权限...
3. Fragment Transactions:在Android 5.0中,对Fragment的管理得到了增强,可以更方便地进行事务操作,例如添加、移除或替换Fragment。示例代码会演示如何使用`FragmentManager`进行这些操作。 4. JobScheduler:...
2. **布局管理(Layout Management)**:为了在屏幕上正确地定位引导视图,开发者需要掌握LinearLayout、RelativeLayout、ConstraintLayout等布局的使用,以及如何通过XML或代码动态设置布局属性。 3. **动画效果...
2. **后端逻辑处理**:Android应用的业务逻辑主要在Activity或Fragment中实现,通过监听用户的操作,调用相应的服务进行数据处理。在这个仓库管理系统中,出库和入库操作涉及到数据的增删,而数据导出则需要读取...
• Fragment operations: controlling the end of the graphics pipeline • Advanced shader usage and geometry management • A fully updated API reference, now based on the official ARB (Core) OpenGL ...
8. **状态管理(State Management)**:如使用ViewModel和LiveData实现数据在配置变更时的保存和恢复。 9. **权限管理(Permissions)**:如果应用涉及到读写文件或访问位置等敏感操作,会涉及Android的运行时权限...
4. **布局管理(Layout Management)** - 使用`ConstraintLayout`或`RelativeLayout`等布局管理器可以方便地实现视图之间的关联和联动。例如,当导航菜单打开时,可以约束主内容区域的宽度或透明度以响应变化。 5. *...
6. **Activity与Fragment管理**:引导页完成后,通常会跳转到主界面,涉及Activity的生命周期管理和Fragment的使用。 7. **版本控制**:源码可能包含了版本控制信息(如Git),帮助开发者追踪代码变更。 【压缩包子...
其他今年加入到IOS的服务包括VoIP, SSL VPN, 包过滤Web Service Management Agent(SOAP),XML-PI和H.323 Client Side Vulnerabilities:But up until now, client side vulnerabilities have not played any role ...