产生及介绍
Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。
使用大全
客官,代码来!
/**
* 往Activity中添加一个Fragment
* 通过 getSupportFragmentManager().popBackStack(); 出栈
* @param containerViewId
* @param fragment
* author: yifei
*/
public void addFragment(int containerViewId, Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(containerViewId, fragment).commit();
}
/**
* 从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁。如果添加到回退栈,则这个Fragment的实例不会销毁,但是它的布局视图会被销毁
* @param fragment
* author: yifei
**/
public void removeFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.remove(fragment).commit();
}
/**
* 使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~
* @param containerViewId
* @param fragment
* author: yifei
**/
public void replaceFragment(int containerViewId, Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(containerViewId, fragment).commit();
}
/**
* 隐藏当前的Fragment,仅仅是设为不可见,实例并不会销毁,Fragment的布局视图也不会销毁
* @param fragment
* author: yifei
**/
public void hideFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.hide(fragment).commit();
}
/**
* 显示之前隐藏的Fragment
* @param fragment
* author: yifei
**/
public void showFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.show(fragment).commit();
}
/**
* 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护
* @param fragment
* author: yifei
**/
public void detachFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.detach(fragment).commit();
}
/**
* 重建view视图,附加到UI上并显示
* @param fragment
* author: yifei
**/
public void attachFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.attach(fragment).commit();
}
/**
* 将一个fragment替换为另一个,并在后台堆栈中保留之前的状态, 通过 getSupportFragmentManager().popBackStack(); 出栈
*
* 解析:当通过函数transaction.addToBackStack(null)将这个事务添加到回退栈,则会记录这个事务的状态变化过程,如从FragmentA —>FragmentB,
* 当用户点击手机回退键时,因为transaction的状态变化过程被保存,则可以将事务的状态变化过程还原,即将FragmentB —> FragmentA.
* 当Activity的回退栈中没有事务时,在按返回键则会退出Activity
*
* @param containerViewId
* @param fragment
* author: yifei
*/
public void addToBackStackFragment(int containerViewId, Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(containerViewId, fragment);
transaction.addToBackStack(null);
transaction.commit();
}