0
点赞
收藏
分享

微信扫一扫

Fragment


静态加载Fragment

步骤;

      1、新建一个Fragment1类继承Fragment

Fragment1的命名空间“

<fragment
         android:id="@+id/fragment"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:name="com.example.fragment.fragment_static"
         />


动态加载Fragment

步骤:

        1、同静态1步骤

        2、在Activity中采用碎片管理者的事务处理

             a) 获取碎片管理者

             b) 由碎片管理者开始事务

             c) 把所要加载的碎片添加到事务

     d)   提交事务      

相关代码:

     

Fragment1 fragment1 = new Fragment1();
               FragmentManager fragmentManager = getFragmentManager();
               FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
               beginTransaction.add(R.id.frame, fragment1);  //frame为fragment1的父布局
               beginTransaction.addToBackStack(null);  //处理物理返回键
               beginTransaction.commit();


Fragment的生命周期

/*
      * 当Fragment被添加到Activity中时会调用,并且只调用一次
      */
     @Override
     public void onAttach(Activity activity) {
         // TODO Auto-generated method stub
         super.onAttach(activity);
         Log.i("Main", "Fragment2---onAttach()");
     
     }
     /*
      * 当创建Fragment时被调用,只会调用一次
      */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         super.onCreate(savedInstanceState);
         Log.i("Main", "Fragment2---onCreate()");

     }
     /*
      * 当Fragment所在的Activity启动完成以后调用
      */
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         // TODO Auto-generated method stub
         super.onActivityCreated(savedInstanceState);
         Log.i("Main", "Fragment2---onActivityCreated()");
     
     }
     /**
      * 启动Fragment时回调
      */
     @Override
     public void onStart() {
         // TODO Auto-generated method stub
         super.onStart();
         Log.i("Main", "Fragment2---onStart()");
     
     }
     /**
      * 回复Fragment时回调次方法,调用onStart()方法后一定会调用此方法。
      * (Fragment获取焦点时调用)
      */
     @Override
     public void onResume() {
         // TODO Auto-generated method stub
         super.onResume();
         Log.i("Main", "Fragment2---onResume()");
         
     }
     /**
      * 暂停Fragment时回调
      */
     @Override
     public void onPause() {
         // TODO Auto-generated method stub
         super.onPause();
         Log.i("Main", "Fragment2---onPause()");
     
     }
     /**
      * 停止Fragment时回调
      */
     @Override
     public void onStop() {
         // TODO Auto-generated method stub
         super.onStop();
         Log.i("Main", "Fragment2---onStop()");
         
     }
     /**
      * 销毁Fragment所包含的View组件时回调
      */
     @Override
     public void onDestroyView() {
         // TODO Auto-generated method stub
         super.onDestroyView();
         Log.i("Main", "Fragment2---onDestroyView()");

     }
     /**
      * 销毁Fragment时会被回调
      */
     @Override
     public void onDestroy() {
         // TODO Auto-generated method stub
         super.onDestroy();
         Log.i("Main", "Fragment2---onDestroy()");
     
     }
     /**
      * 把Fragment从Activity中删除时会被回调 
      */
     @Override
     public void onDetach() {
         // TODO Auto-generated method stub
         super.onDetach();
         Log.i("Main", "Fragment2---onDetach()");
     }

Fragment和Activity的通信

1、Activity--〉Fragment

Fragment发送数据

     a) 在所要通信的Fragment中设置一个消息变量,并生成get(),set()方法

     b) 在Activity中通过FragmentManager的findViewById方法找到所要通信的布局,并通过set()方法传递数据

     c)  在Fragment的get()方法即可接收此值。

     关键代码:

      

/**
          * 对静态Fragment,由Activity向Fragment传值的方法
          * 1、获取碎片管理者对象 FragmentManager(getFragmentManager())
          * 2、通过调用碎片管理者的findFragmentById(静态碎片的id)方法找到通信的碎片
          * 3、转换成你定义的碎片
          * 4、调用碎片中的方法传递你的数据
          */        FragmentManager fragmentManager = getFragmentManager();
         Fragment findFragmentById = fragmentManager.findFragmentById(
                 R.id.myFragment);
         fragment_static myFragment = (fragment_static) findFragmentById;
         myFragment.setSendText("Activity向Fragment发送数据");

Activity向动态加载的Fragment发送数据

         

/**
                  * 动态加载Fragment并向Fragment传递数据
                  * 利用bundle数据类型进行传值,
                  * 1.新建Bundle数据类型,添加所要传送的数据,创建键值对
                  * Bundle bundle = new Bundle();
                  * bundle.putString("name", text);
                  * 2.利用Fragment的setArguments(Bundle bundle);进行对碎片传值
                  * fragment4.setArguments(bundle);Fragment中通过getArguments().get("name")得到Actiity中传来的值
                 */            
            相关代码:
              Activity中:
               String text = editText.getText().toString();
                 Fragment4 fragment4 = new Fragment4();
                 Bundle bundle = new Bundle();
                 bundle.putString("name", text);
                 fragment4.setArguments(bundle);
                 FragmentManager fragmentManager = getFragmentManager();
                 FragmentTransaction beginTransaction = fragmentManager
                         .beginTransaction();
                 /**
                  * 下面add()方法中的第三个参数指的是要加载的碎片的tag(标识),
                  * add()方法是把当前碎片直接加入到事务队列中,不管有没有同一标识的碎片,
                  * 碎片中组件加载时总加载最上面的那个。
                  * replace()方法是:若事务中原先有该碎片的话,先删除该碎片,然后再把当前的
                  * 碎片加入到此事务中。用新的同一标识的碎片替换原来的碎片。
                  */
                 //fragmentTransaction.add(R.id.layout1,fragment4,"fragment4");
                 beginTransaction.replace(R.id.layout1,fragment4,"fragment4");
                 beginTransaction.addToBackStack(null);
                 beginTransaction.commit();
                 Toast.makeText(MainActivity4.this, "向Fragment发送数据" + text,
                                Toast.LENGTH_SHORT).show();               Fragment中:
                 String tv = getArguments().get("name")+"";

2、Fragment向Activity传值

     a) 在Fragment中自定义一个接口,在接口中写入传递信息的方法

     b) 在Activity中调用该接口并实现该方法  ,该方法中便可以接收Fragment传来的值

getActivity()的实现的接口的方法,实现传值。

     代码:

Fragment中:
            private Listener listener;
             public interface Listener{
                   public void thanks(String text);
              }
             @Override
           public void onAttach(Activity activity){
               super.onAttach(activity);
               listener = (Listener)activity;
         
           }          listener.thanks(thanksText);
         Activity中:
        implements Listener
         @Override
         public void thanks(String str) {
         // TODO Auto-generated method stub
         Toast.makeText(MainActivity4.this, "收到"+str, Toast.LENGTH_SHORT)
         .show();
         
     }


举报

相关推荐

0 条评论