zoukankan      html  css  js  c++  java
  • android中fragment的使用及与activity之间的通信

    一.fragment的生命周期,具体方法什么时候调用就不说了。

    二 在activity中使用fragment和通信有两种常见的方式,

    1.静态的方式

      (1)定义一个类继承Fragment,如 MyFragment,这里复写onCreateView()方法和onAttach()方法

      (2)onCreateView()加载一些布局对象以及设置View对象,并返回一个View对象,onAttach()通信的时候用到

      (3)在activity的layout的布局文件中引用Fragment继承类(注意设置name属性为MyFragment的全包名,另外设置id或者tag其中一种数据即可)

    以上就可以在activity使用Fragment了,如果要互相通信,接着下面(包含上面 1 2 3步骤)

        (4.1)activity向Fragment发送数据

      (4.2)在MyFragment中定义私有成员变量,并实现get和set方法用来接收数据,直接上代码

      FragmentManager fragmentManager = getFragmentManager();
      Fragment findFragmentById = fragmentManager.findFragmentById(R.id.fragment);
      MyFragment myFragment= (MyFragment) findFragmentById;// 找到fragment
      myFragment.setAa("avtivity传的值");

      (4.3) 可以在MyFragment 通过getAa()获取到数据了

      (5.1) Fragmenty向activit发送数据

      (5.2)通过成员变量

      (5.4)activity实现MyInterface 接口,就可以通过接口中的方法参数获得传进来的值

    2动态的方式

      (1)定义一个类继承Fragment,如 MyFragment,这里复写onCreateView()方法和onAttach()方法

      (2)在activity中动态加载Fragment    

      MyFragment fragment2 = new MyFragment();
      FragmentManager fragmentManager = getFragmentManager();
      FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
      beginTransaction.add(R.id.ll_load_fragment, fragment2);//将fragment2 添加到id为ll_load_fragment的布局中
      beginTransaction.commit();

      (3.1)activity向Fragment传值

      MyFragment fragment = new MyFragment();
      FragmentManager fragmentManager = getFragmentManager();
      FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
      Bundle bundle = new Bundle();
      String value = "activity传的值";
      bundle.putString("name", value);
      fragment.setArguments(bundle);// 将bundle数据加到Fragment中
      beginTransaction.add(R.id.ll_load_fragment, fragment, "fragment");
      beginTransaction.commit();

      (3.2)在MyFragment 中通过getArguments().get(key)获取值

      (4.1)Fragment向activity传值 

       在MyFragment 中定义一个接口 

        private MyInterface myInterface;

        public interface MyInterface{

                   public void sendMsg(Object object);
        }

      (4.2)通过onAttach(Activity activity)方法将activity转为myInterface  

      public void onAttach(Activity activity) {
        myInterface=(MyInterface) activity;
        super.onAttach(activity);
      }

      利用接口实现Fragment与Activity的信息传递.
    总结一下Fragment与Activity之间交换数据的方式:

    动态
     * 1 Activity向Fragment传递数据
       fragment.setArguments(bundle)

     * 2 Fragment向Activity传递数据
     在Fragment内部定义一个回调接口.让包含该Fragment的
     Activity实现该接口.这样Fragment就可调用该回调方法
     将数据传给Activity

    静态
     * 1 Activity向Fragment传递数据
      直接调用Fragment继承类的set方法

     * 2 Fragment向Activity传递数据
     直接调用Fragment继承类的get方法

     就是通过Fragment继承类成员变量的get和set方法实现互相传值

    Flagment使用.zip

  • 相关阅读:
    30网络通信之多线程
    U盘自动拷贝
    多态原理探究
    应用安全
    应用安全
    编码表/转义字符/进制转换
    代码审计
    文件上传
    渗透测试-Web安全-SSRF
    中间人攻击
  • 原文地址:https://www.cnblogs.com/fulai/p/4389696.html
Copyright © 2011-2022 走看看