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

  • 相关阅读:
    格式化数字,将字符串格式的数字,如:1000000 改为 1 000 000 这种展示方式
    jquery图片裁剪插件
    前端开发采坑之安卓和ios的兼容问题
    页面消息提示,上下滚动
    可以使用css的方式让input不能输入文字吗?
    智慧农村“三网合一”云平台测绘 大数据 农业 信息平台 应急
    三维虚拟城市平台测绘 大数据 规划 三维 信息平台 智慧城市
    农业大数据“一张图”平台测绘 大数据 房产 国土 农业 信息平台
    应急管理管理局安全生产预警平台应急管理系统不动产登记 测绘 大数据 规划 科教 三维 信息平台
    地下综合管廊管理平台测绘 大数据 地下管线 三维 信息平台
  • 原文地址:https://www.cnblogs.com/fulai/p/4389696.html
Copyright © 2011-2022 走看看