Fragment简单介绍

本文介绍了Android中Fragment的使用,包括静态加载和动态加载两种方式。静态加载时,Fragment在布局文件中定义,通过onCreateView方法创建视图。动态加载则通过代码实现,提供更高的灵活性。在Activity与Fragment间传递信息,通常借助Bundle和setArguments方法。对于Activity向Fragment传递信息,可以使用setArguments,而Fragment向Activity传递信息,可以通过接口回调实现。
摘要由CSDN通过智能技术生成

Fragment的简单使用

静态加载

  1. 如果要弄一个微信对话框,则可以分成标题栏和对话栏两个Fragment

  2. 所以staticfragment_layout有两个

  3. 每个都需要有一个name属性,这个属性值为一个 Fragment类或者它的子类

  4. 在这个子类中,需要重写 ==onCreateView== 方法,这个方法的任务就是把 这个fragment对应的布局文件变成view返回回去。

    //将布局文件转化为view
    View view=inflater.inflate(R.layout.simplefragment2_layout,container,false);
    return view;
  5. 要注意的是,因为主布局文件拥有fragment,所以其实主布局文件也拥有fragment的控件,并且可以直接findviewbyid,而在fragment类中就要view.findviewbyid

  6. 所以Fragment静态加载就是加布局文件中有fragment,然后每个fragment有对应的id和name,然后每个fragment类又重写onCreateView然后返回view。

动态加载

  1. 动态加载其实就是不在布局文件中用 节点来布置,而是通过代码。

  2. 动态加载要点就是把fragment类去代替原有布局中的一些layout,或者是替换原本的。可以增删改查,所以灵活性更强。

  3. 代码如下:

    SimpleFragment1 sf1=new SimpleFragment1();  //声明一个fragment类
    FragmentManager manager=getFragmentManager(); //创建一个fragment管理者
    FragmentTransaction beginTransaction=manager.beginTransaction();  //创建一个fragment事务
    beginTransaction.add(R.id.frame,sf1);     //事务可以通过增删改查来代替不同layout或    fragment,add是增加,意思是在frame剩余的地方加入
    beginTransaction.addToBackStack(null);    //设置按返回键就可以退回刚才的操作
    beginTransaction.commit();   //事务只有commit提交了,才能是真正进行操作
    //然后操作就搞定了,然后会将fragment去填充layout或者fragment

Activity动态加载Fragment的同时,向Fragment发送信息

  1. 信息传递的载体是 Bundle, 可以通过Bundle的put方法传递一些基本类型,也可以传递 Serizable接口

    Stringi info="zst";
    Bundel bundle=new Bundle();
    bundle.putString("name",info);

  2. 而fragment类是有一个 fragment.setArgument(Bundle) 的参数,然后把bundle传递进去即可。

  3. 然后就像动态加载那样

    SimpleFragment2 sf2=new SimpleFragment2();
    sf2.setArguments(bundle);
    //这样fragment就带有了bundle的数据
    //所以要在simpleFragment2那里处理消息。
    FragmentManager manager=getFragmentManager();
    FragmentTransaction beginTransaction=manager.beginTransaction();
    beginTransaction.add(R.id.astif_layout,sf2,"SimpleFragment2");  //这样为fragment添加tag,那又有什么用?
    beginTransaction.addToBackStack(null);
    beginTransaction.commit();
  4. 同时,在Fragment类中,也要处理接收信息。

    Bundle bundle=getArguments();   //fragment自带getArgument函数
    if(bundle!=null) {           //如果fragment带有参数
      String InfoFromActivity = (String) bundle.get("name");
      textView = (TextView) view.findViewById(R.id.sf2_textview);
       textView.setText("我的名字是:" + InfoFromActivity);
    }
    

Activity静态加载Fragment并传递信息

  1. 静态加载传递信息就比较简单了,我们可以直接把 fragment 实例化拿出来,直接操作即可

    FragmentManager manager=getFragmentManager();
    Fragment fragment=manager.findFragmentById(R.id.sf1);
    SimpleFragment sf1=(SimpleFragment)fragment;
    //然后就把 SimpleFragment拿到手,想怎样传递数据都行。(通过setter,getter)

Fragment向Activity传递信息

  1. 这个所谓的传递信息,也就是把在Fragment类中,把所在的Activity拿到手,然后对Activity进行接口化,就可以实现多态了。

  2. //首先要将Activity接口化
    public interface ConverInfo{
     public void getInfo(String info);
    }
    
    //在Fragment类中
    @Override
    public void onAttach(Activity activity){
     ConverInfo listener=(ConverInfo)activity;
     super.onAttach(activity);
    }
    
    //这样就算传递信息了... 因为在Activity中已经有这个字符串了
    ConverInfo.getInfo("I love zst");
    
    //在Activity中
    @Override
    public void getInfo(String info){
     Toast.makeText(this,"I have get the infomation: "+info,Toast.xxx).show();
    }
    
  3. 如果是静态的也差不多,因为静态的话,Activity简直就有Fragment的实例,所以直接获取即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值