深圳建设门户网站,有赞微商城登录,dede购物网站,佛山国内快速建站本文主要摘录自Android中使用FragmentManager管理fragments 和 浅谈FragmentManager与fragment之一二事 先讲下自己对fragment的理解#xff1a;
对于fragment#xff0c;有太多官方文档和博文来介绍#xff0c;此处不做转述#xff1a;我感觉android提供fragment这种组件… 本文主要摘录自Android中使用FragmentManager管理fragments 和 浅谈FragmentManager与fragment之一二事 先讲下自己对fragment的理解
对于fragment有太多官方文档和博文来介绍此处不做转述我感觉android提供fragment这种组件给了开发者更多的“创造”的机会开发者可以基于fragment自己创造、管理页面的处理逻辑fragment之于android就相当于activity之于androidactivity就是fragment的操作系统容器。
fragment和activity的区别在于
fragment的生命周期方法是由托管activity而不是操作系统调用的因为操作系统无法得知Activity用来管理视图的fragmentfragment的使用是在Activity它自己内部处理。 作者 Lynhaw 链接https://www.imooc.com/article/4403 来源慕课网
FragmentManager:
为了管理Activity中的fragments需要使用FragmentManager。可以通过调用getFragmentManager() | getSupportFragmentManager()获取FragmentManager。 因为FragmentManager的API是在Android 3.0也即API level 11开始引入的所以对于之前的版本需要使用support library中的FragmentActivity并且使用getSupportFragmentManager()方法。 Fragment Transactions:
使用Fragment时可以通过用户交互来执行一些动作比如增加、移除、替换等。所有这些改变构成一个集合这个集合被叫做一个transaction。
如何获取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可以通过返回键来恢复。
commit()方法:
调用commit()方法并不能立即执行transaction中包含的改变动作commit()方法把transaction加入activity的UI线程队列中。但是如果觉得有必要的话可以调用executePendingTransactions()方法来立即执行commit()提供的transaction。这样做通常是没有必要的除非这个transaction被其他线程依赖。
注意你只能在activity存储它的状态当用户要离开activity时之前调用commit()如果在存储状态之后调用commit()将会抛出一个异常。这是因为当activity再次被恢复时commit之后的状态将丢失。如果丢失也没关系那么使用commitAllowingStateLoss()方法。