4 第四单元 Fragment的基本使用
一.Fragment介绍
Fragment,英文碎片的意思,早期应用在平板设计中
二、Fragment常用的方法
添加Fragment的方法:add()
1:切换fragment时不会重新创建,会保持fragment的状态,切换前是什么状态切换后还是什么状态
2:一般需要结合hide和show方法一起使用
总结:如果Fragment会频繁的被使用,可以使用add方法
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
FragmentA fragmentA=new FragmentA();
transaction.add(R.id.main_frame_layout, fragmentA);//<-add()方法添加Fragment
transaction .hide(fragmentB);
transaction.show(fragmentA);
替换Fragment的方法:replace()
1:replace方法,用FragmentA替换FragmentB
2:FragmentA在被replace后被销毁onDestory()
总结:如果旧Fragment无须再次使用,可以使用replace方法将其销毁
使用replace()方法替换Fragment
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
FragmentA fragmentA= new FragmentA();
transaction.replace(R.id.main_frame_layout, fragmentA);
transaction.commit();
移除Fragment的方法:remove()
1:当FragmentB替FragmentA时,先调用remove()方法移除FragmentA,然后再调用add()方法添加FragmentB
2:此方法调用时,这个FragmentA将会被销毁
总结:移除当前的Fragment,设置为不可见,可能会被销毁
FragmentA fragmentA= new FragmentA();
transaction.remove(fragmentA);//使用remove()方法移除Fragment
transaction.show(fragmentB);
transaction.commit();
隐藏/显示Fragment的方法:hide()/show()
1:切换到另外一个Fragment时,使用hide()方法将当前Fragment隐藏
2:当该Fragment需要被重新显示出来的时候,使用show()方法完成
总结:隐藏当前的Fragment,设置为不可见,但是并不会销毁
FragmentA fragmentA= new FragmentA();
transaction.add(R.id.main_frame_layout, fragmentA);
transaction .hide(fragmentB);//hide():传入要隐藏的Fragment
transaction.show(fragmentA);//show():传入要显示的Fragment
三、FragmentManager
1.简介
中文名称:碎片管理器
出生日期:Android 3.0/API level 11
助 理:FragmentTransaction
获取方式:①Android 3.0前的版本使用getSupportFragmentManager()方法获取
②Android 3.0之后的版本用getFragmentManager()获取
2.实现思路
1:获得FragmentManager对象
FragmentManager fragmentManager=getFragmentManager();
2:开启事务
FragmentTransaction transaction = fragmentManager.beginTransaction();
3:通过FragmentTransaction 调用add()、replace()方法管理fragment
4:transaction .commit();
Fragment的动态显示
HomeFragment类的代码
public class HomeFragment extends Fragment {//继承Fragment
@Nullable
@Override
//重写onCreateView方法
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.pic5, null);
return view;
}
}
final HomeFragment homeFragment = new HomeFragment();
//获得管理者
// FragmentManager manager1 = getSupportFragmentManager();
//获得事物管理者
// FragmentTransaction transaction = manager1.beginTransaction();
//添加到回退栈
// transaction.addToBackStack("one");
//替换
// transaction.replace(R.id.frame,new HomeFragment());
//提交事务
// transaction.commit();
getSupportFragmentManager().beginTransaction().addToBackStack("one").replace(R.id.frame,homeFragment).commit();//简写