第六章:Android开发之Fragment
什么是FragmentFragment特点1、Fragment作为Activity界面的一部分组成出现;2、可以在一个Activity中同时出现多个Fragment,并且一个Fragment亦可在多个Activity中使用;3、在Activity运行过程中,可以添加、移除或者替换Fragment(add()、remove()、replace());4、Fragment可以响应自己的输入事件,并且有
什么是Fragment
Fragment特点
1、Fragment作为Activity界面的一部分组成出现;
2、可以在一个Activity中同时出现多个Fragment,并且一个Fragment亦可在多个Activity中使用;
3、在Activity运行过程中,可以添加、移除或者替换Fragment(add()、remove()、replace());
4、Fragment可以响应自己的输入事件,并且有自己的生命周期,当然,它们的生命周期直接受其所属的宿主Activity的生命周期控制。
Fragment的两种加载方式
(1)静态加载
注意
必须有android:id 和android:name这两个属性
(2)动态加载*
-
1.创建一个Layout文件,就是Fragment的UI界面
-
2.创建一个类继承Fragment,然后重写里面的onCreateView方法
-
3.在Activity中获得一个事务FragmentManager
-
4.创建事务FragmentTransaction
-
5.动态创建Fragment,添加到事务里
-
6.提交事务对象
Fragment生命周期
生命周期的对比
动态加载启动时
A===onCreate
A===onStart
Fragment=onAttach=
Fragment=onCreate=
Fragment=onCreateView=
Fragment=onActivityCreated=
Fragment=onStart=
A===onResume
Fragment=onResume=
静态加载启动时
A===onCreate
Fragment=onAttach=
Fragment=onCreate=
Fragment=onCreateView=
A===onStart
Fragment=onActivityCreated=
Fragment=onStart=
A===onResume
Fragment=onResume=
home键
A===onPause
A===onStop
Fragment=onStop=
再启动
A===onRestart
A===onStart
Fragment=onStart=
A===onResume
Fragment=onResume=
返回键
A===onPause
A===onStop
Fragment=onStop=
A===onDestroy
Fragment=onDestroyView=
Fragment=onDestroy=
Fragment=onDetach=
添加add
1、获得FragmentManager对象
FragmentManager supportFragmentManager = getSupportFragmentManager();
2、开始事务
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
3、添加Fragment (添加两个fragment,需要设置全部变量)
myFragment1 = new MyFragment1();
fragmentTransaction.add(R.id.frame,myFragment1);
4、提交FragmentManager
fragmentTransaction.commit();
移除remove
1、获得FragmentManager对象
FragmentManager supportFragmentManager = getSupportFragmentManager();
2、开始事务
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
3、移除Fragment
fragmentTransaction.remove(myFragment2);
4、提交FragmentManager
fragmentTransaction.commit();
替换replace
// **1、获得FragmentManager对象**
FragmentManager supportFragmentManager = getSupportFragmentManager();
//2、开始事务
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
//3、添加Fragment
//MyFragment3 myFragment3 = new MyFragment3(); fragmentTransaction.replace(R.id.frame,myFragment3);
// 4、提交FragmentManager
fragmentTransaction.commit();
##隐藏hide
1、获得FragmentManager对象
FragmentManager supportFragmentManager = getSupportFragmentManager();
2、开始事务
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
3、添加Fragment
// MyFragment3 myFragment3 = new MyFragment3(); fragmentTransaction.hide(R.id.frame,myFragment3);
4、提交FragmentManager
fragmentTransaction.commit();
显示show
1、获得FragmentManager对象
FragmentManager supportFragmentManager = getSupportFragmentManager();
2、开始事务
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
3、添加Fragment
// MyFragment3 myFragment3 = new MyFragment3(); fragmentTransaction.show(R.id.frame,myFragment3);
4、提交FragmentManager
fragmentTransaction.commit();
问题1
存在的问题:
1)如果需要重复使用该fragment,就需要每次都重新加载。比如我在第一个fragment中的EditText中输入数据后,然后切换到第二个fragment,然后再切换回来,就会造成数据丢失;
2)如果每切换一次就实例化一次的话,FragmentManager下的栈也会爆满,最终会导致手机卡顿,
解决方法先添加在隐藏:
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.frame, myFragment2);
transaction.add(R.id.frame, myFragment3);
transaction.commit();
问题
存在的问题:
1)提前加载页面,浪费流量和资源;
优点:
2)提前加载页面,减少等待的过程。
先声明不创建
用到时在实例化
MyFragment2 myFragment2;
MyFragment3 myFragment3;
更多推荐
所有评论(0)