概述
Fragment
文章目录
- Fragment
- 1、什么是Fragment
- 2、为什么要有Fragment
- 3、Fragment有什么优点
- 4、Fragment的生命周期
- 5、Fragment使用的一些方法
- **1.将 fragment添加到Activity的两种方式**
- a.静态注册:以标签的形式添加到Activity的布局当中。
- b.动态注册:通过java代码将fragment添加到已存在的宿主Activity中
- **2.Fragment与Activity的交互**
- a.组件获取
- b.数据传递
1、什么是Fragment
1.Fragment是Android3.0开始新增的概念,意为碎片、片段。 Fragment是依赖于Activity的,不能独立存在的。
2、为什么要有Fragment
1.Android运行在各种各样的设备中,有小屏幕的手机,还有大屏幕的平板,电视等。同样的界面在手机上显示可能很好看,在大屏幕的平板上就未必了,手机的界面放在平板上可能会有过分被拉长、控件间距过大等情况。针对屏幕尺寸的差距,Fragment的出现能做到一个App可以同时适应手机和平板。这就是为什么要有Fragment的原因。
3、Fragment有什么优点
1.Fragment可以将Activity分离成多个可重用的组件,不需要把代码都写到Activity中,且每个Fragment都有它自己的生命周期和UI。
2.Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。
3.Fragment是一个独立的模块,紧紧地与Activity绑定在一起。可以在Activity运行中动态地移除、加入、交换等。
4.Fragment 切换流畅,轻量切换。
5.Fragment 在4.2.版本中新增嵌套fragment使用方法,能够生成更好的界面效
总结起来就是模块化,可重用,可适配
4、Fragment的生命周期
- Activity加载Fragment的时候,依次调用下面的方法: onAttach -> onCreate -> onCreateView -> onActivityCreate -> onStart ->onResume
- 当我们弄出一个悬浮的对话框风格的Activity,或者其他,就是让Fragment所在的Activity可见,但不获得焦点 onPause
- 当对话框关闭,Activity又获得了焦点: onResume
- 当我们替换Fragment,并调用addToBackStack()将他添加到Back栈中 onPause -> onStop -> onDestoryView !!注意,此时的Fragment还没有被销毁哦!!!
- 当我们按下键盘的回退键,Fragment会再次显示出来: onCreateView -> onActivityCreate -> onStart -> onResume
- 如果我们替换后,在事务commit之前**没有调用addToBackStack()**方法将 Fragment添加到back栈中的话;又或者退出了Activity的话,那么Fragment将会被完全结束, Fragment会进入销毁状态 onPause -> onStop -> onDestoryView -> onDestory -> onDetach
5、Fragment使用的一些方法
1.将 fragment添加到Activity的两种方式
a.静态注册:以标签的形式添加到Activity的布局当中。
b.动态注册:通过java代码将fragment添加到已存在的宿主Activity中
1.FragmentManager:用来管理Activity中的fragment,app包中使用getFragmentManager() v4包中getSupportFragmentManager
2.FragmentTransaction:事务,用来添加,移除,替换fragment,FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务
3.transaction.add() :往Activity中添加一个Fragment
4.transaction.remove() :从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁。
5.transaction.replace():使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~
6.transaction.hide():隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
7.transaction.show():显示之前隐藏的Fragment
8.transaction.commit():提交一个事务
9.detach():会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
2.Fragment与Activity的交互
a.组件获取
1.Fragment获得Activity中的组件: getActivity().findViewById(R.id.list);
2.Activity获得Fragment中的组件(根据id和tag都可以): getFragmentManager.findFragmentByid(R.id.fragment1);
b.数据传递
1. Activit传递数据给Fragment:在Activity中创建Bundle数据包,调用Fragment实例的setArguments(bundle) 从而将Bundle数据包传给Fragment,然后Fragment中调用getArguments获得 Bundle对象,然后进行解析就可以了
2. Fragment传递数据给Activity :在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现该回调接口, Fragment就可以通过回调接口传数据了
定义一个回调接口
/*接口*/
public interface CallBack{
/*定义一个获取信息的方法*/
public void getResult(String result);
}
接口回调(Fragment中)
/*接口回调*/
public void getData(CallBack callBack){
/*获取文本框的信息,也可以传其他参数*/
String msg = editText.getText().toString();
callBack.getResult(msg);
}
使用接口回调方法读数据(Activity中)
/* 使用接口回调的方法获取数据 */
leftFragment.getData(new CallBack() {
@Override
public void getResult(String result) {
/*打印信息*/
Toast.makeText(MainActivity.this, "-->>" + result, 1).show();
}
});
3. Fragment与Fragment之间的数据互传:找到需要接收数据的Fragment对象直接调用setArguments传数据就行了
FragmentManager fManager = getSupportFragmentManager( );
FragmentTransaction fTransaction = fManager.beginTransaction();
Fragmentthree t1 = new Fragmentthree();
Fragmenttwo t2 = new Fragmenttwo();
Bundle bundle = new Bundle();
bundle.putString("key",id);
t2.setArguments(bundle);
fTransaction.add(R.id.fragmentRoot, t2, "~~~");
fTransaction.addToBackStack(t1);//接收一个名字返回栈的状态
fTransaction.commit();
最后
以上就是怕孤独发夹为你收集整理的fragment简介Fragment的全部内容,希望文章能够帮你解决fragment简介Fragment所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复