zoukankan      html  css  js  c++  java
  • 14 Fragment 碎片总结

    Fragment 碎片

    • 一, Fragment是什么?

      Android 3.0以后出现的 Api11 以上 Activity的组成部分
      Fragment(小的Activity)
      Fragment可以显示 UI内容 可以和用户进行交互

      Fragment的主要作用:提高代码的重用性 和用户体验
      可以对Activity组件 进行分组和模块化的管理

      Fragment 有自己的生命周期 可以接受和处理用户的事件
      可以在Activity中 添加,替换和移除 Fragment

      注意:1,Fragment必须依附Activity
      2,一个Activity可以包含多个Fragment,一个Fragment可以
      被多个Activity使用
      这里写图片描述

    • 二, 如何创建Fragment

      1,创建一个类继承Fragment
      2,得到Fragment生命周期方法 onCreateView() (展示UI)

    • 三, Fragment 的显示方式

      1,静态展示Fragmeng(在布局中直接添加Fragment)
      1,在布局中标签
      2,id Fragmeng的唯一标识
      3,name 添加的是那个Fragmeng

      2,动态添加Fragment(在布局中添加一个容器,动态代码将Fragmeng添加到容器)
      1,在布局中添加容器
      2,在逻辑代码中 获取FragmengManage
      3,通过Fragmeng的事务
      4,Fragmeng的事务 将Fragmeng添加相应的容器
      5,Fragment的事务 提交

    • 四,Activity向Fragment传值

      Activity:(setArguments(bundle))
      //传值 ActivityToFragment
      Bundle bundle = new Bundle();
      bundle.putString(“msg”, “今天开会”);
      //传值
      myFragment.setArguments(bundle);

      Fragment:(getArguments()
      //获取传递过来的值
      Bundle bundle = getArguments();
      //获取值
      String msg = bundle.getString(“msg”);

    • 五, Fragment 向Activity传值 (接口回调)

      1,创建一个回调接口
      2,在Activity中实例化回调接口
      3,将实例化的接口传给Fragment (getActivity)
      4,在Fagment中 将值传递给Activity

    • 六, Fragment向Fragment传值

      1,setArgument()
      //传值
      MyFragment2 myFragment2 = MyFragment2.newInstance(bundle);

      MyFragment2 myFragment2 = new MyFragment2();
      myFragment2.setArguments(bundle);
      

      2,在Fragment1中找到Fragment2对象 通过对象调方法
      通过Fragment的id 获取Fragment2的对象
      Fragment2 fragment2 = (Fragment2) getFragmentManager().findFragmentById(R.id.rightfragment);
      fragment2.setTextValues(msg);

      3,在Fragment1中找到Fragment2中的控件
      TextView tv = (TextView) getFragmentManager().findFragmentById(R.id.rightfragment).getView().findViewById(R.id.tv_show);
      TextView tv = (TextView) getActivity().findViewById(R.id.tv_show);
      tv.setText(msg);

    • 七, Fragment的生命周期 11个生命周期方法
      这里写图片描述
      第一次打开app
      09-08 06:05:55.590: E/MainActivity(3786): ==onCreate==
      09-08 06:05:55.590: E/MyFragment(3786): ==onAttach==
      09-08 06:05:55.590: E/MyFragment(3786): ==onCreate==
      09-08 06:05:55.600: E/MyFragment(3786): ==onCreateView==
      09-08 06:05:55.600: E/MyFragment(3786): ==onActivityCreated==
      09-08 06:05:55.600: E/MainActivity(3786): ==onStart==
      09-08 06:05:55.600: E/MyFragment(3786): ==onStart==
      09-08 06:05:55.600: E/MainActivity(3786): ==onResume==
      09-08 06:05:55.610: E/MyFragment(3786): ==onResume==

    按Home键时
    09-08 06:07:08.211: E/MyFragment(3786): ==onPause==
    09-08 06:07:08.211: E/MainActivity(3786): ==onPause==
    09-08 06:07:10.090: E/MyFragment(3786): ==onStop==
    09-08 06:07:10.090: E/MainActivity(3786): ==onStop==

    重新返回到界面

    09-08 06:08:11.391: E/MainActivity(3786): ==onRestart==
    09-08 06:08:11.391: E/MainActivity(3786): ==onStart==
    09-08 06:08:11.391: E/MyFragment(3786): ==onStart==
    09-08 06:08:11.391: E/MainActivity(3786): ==onResume==
    09-08 06:08:11.411: E/MyFragment(3786): ==onResume==

    按返回键时
    09-08 06:09:12.440: E/MyFragment(3786): ==onPause==
    09-08 06:09:12.440: E/MainActivity(3786): ==onPause==
    09-08 06:09:14.110: E/MyFragment(3786): ==onStop==
    09-08 06:09:14.110: E/MainActivity(3786): ==onStop==
    09-08 06:09:14.110: E/MyFragment(3786): ==onDestroyView==
    09-08 06:09:14.110: E/MyFragment(3786): ==onDestroy==
    09-08 06:09:14.110: E/MyFragment(3786): ==onDetach==
    09-08 06:09:14.110: E/MainActivity(3786): ==onDestroy==

    • 八, V4包中的Fragment使用

      V4支持Android1.6

      • 使用;

        • 1,创建一个类 继承V4包的Fragment
        • 2,修改Activity 变成FragmentActivity
        • 3,获取管理者对象 V4 getSupportFragmentManager() 获取事务 V4

          • note:用V4的Fragment 全部改成V4的 用app包的 全部用app包
    • 九, listFragment的使用

      ListFragment 里面封装了 ListVIew : id为: android:id=”@id/android:list”

    设置数据的方法 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

    点击监听的方法 public void onListItemClick(ListView l, View v, int position, long id)

    • 十,回退栈

    .addToBackStack(null)//回退栈 参数:标记 如果没有标记 null
    .commit()

    案例
    Day14_Fragment_demo1:静态注册
    Day14_Fragment_demo2:动态注册

  • 相关阅读:
    6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)
    5-51单片机ESP8266学习-AT指令(8266TCP服务器--用手机TCP调试助手发信息给单片机控制小灯的亮灭)
    4-51单片机ESP8266学习-AT指令(测试TCP服务器--使用串口调试助手--不连接路由器)
    3-51单片机ESP8266学习-AT指令(学会刷固件)
    多线程之:synchonized锁实现的原理<一>
    多线程之:volatile变量的一次写操作的过程
    Spring 事务管理高级应用难点剖析: 第 3 部分
    Spring 事务管理高级应用难点剖析: 第 2 部分
    Spring 事务管理高级应用难点剖析: 第 1 部分
    多线程之:并发编程面临的挑战
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152256.html
Copyright © 2011-2022 走看看