fragment简介

Fragment

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的生命周期

img

  • 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的布局当中。

img

b.动态注册:通过java代码将fragment添加到已存在的宿主Activity中

img

​ 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的交互

img

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();
  • 5
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值