Android之Fragment

作者: 哇楼主 | 来源:发表于2016-09-08 20:58 被阅读143次

    Fragment是什么?

    Fragment(片段,碎片)在3.0以后出现,主要是为了在大屏幕设备上支持动态的和更灵活的UI设计(众所周知android 3.0只转为平板电脑设计,屏幕显示方面跟手机相比差异比较大)。为了适应大屏幕设备上面视图的转换所以设计了fragment。

    fragments.png

    从上图可以看出一个Activity中可以有多个Fragment,一个Fragment可以被多个Activity使用
    Fragment必须显示在Activity中

    Fragment生命周期

    fragment_lifecycle.png
    因为Fragment依存于Activity所以当Activity生命周期结束时Fragment生命周期也会结束
    1,初始化阶段 4个
    onAttach() 与归属Activity建立连接
    onCreate() 初始化Fragment
    onCreateView() 初始化Fragment中显示的UI布局
    onActivityCreatde() 归属Activity的onCreate()方法执行完成
    2, 显示/隐藏 4个
    onStart() 显示Fragment
    onResume() 获得用户焦点
    onPause() 失去用户焦点
    onStop() 关闭Fragment
    3, 销毁阶段 3个
    onDestroyView() 销毁Fragment显示的UI布局
    onDestroy() 销毁Fragment
    onDetach() 与归属Activity断开连接
    静态方式:
    显示: F:onAttach -- F:onCreate -- F:onCreateView -- M:onCreate -- F:onActivityCreated -- M:onStar -- F:onStrar -- M:onResume -- F:onResume
    退出: F:onPause -- M:onPause -- F:onStop -- M:onStop -- F:onDestroyView -- F:onDestroy -- F:ondetach -- M:onDestroy
    动态方式:
    显示: M:onCrate -- F:onAttach -- F:onCreate -- F:onCreateView --F:onActivityCreated -- M:onStar -- F:onStrar -- M:onResume -- F:onResume
    退出: F:onPause -- M:onPause -- F:onStop -- M:onStop -- F:onDestroyView -- F:onDestroy -- F:ondetach -- M:onDestroy

    如何创建Fragment

    • 定义一个类继承Fragment
      public classMyFragment extends Fragment{}
    • 重写父类的生命周期的方法
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.fragment, null);//fragment为自定义要显示的布局
      return view;
      }

    Fragment的显示方式

    • 静态显示(固定内容,不需要接受数据)
      1.在Activity要显示的布局文件中通过<fragment/>标签引入
      2.在标签中需指定id,用来标识Fragment的唯一性(因为一个Activity可以有多个Fragment)
      3.在标签中指定name属性,指定要显示的Fragment(属性值为包名.类名)
    • 动态显示
      1.在显示的布局页面中,通过布局容器占位
      2.在Activity中得到Fragment管理器对象
      FragmentManager manager = getFragmentManager();
      3.开启一个事务
      FragmentTransaction transaction = manager.beginTransaction();
      4.动态显示Fragment
      transaction.replace(R.id.layout1, new Left_Fragment());
      5.提交事务
      transaction.commit();
    • tansaction方法
      替换 replace
      移除 remove
      添加 add
      隐藏 hide
      显示 show
      transaction.addToBackStack(null);//将当前的Fragment加入到回退栈中

    Fragment传值

    • Activity向Fragment传值
      Activity中
      Bundle bundle = new Bundle();
      bundle.putString(key,value);
      fragment.setArguments(bundle);
      Fragment中
      Bundle bundle = getArguments();
      String key = bundle.getString(key);
    • Fragment向Activity传值(接口回调)
      Fragment中
      public void getEditText(CallBack callBack)
      {
      String msg = et.getText().toString().trim();
      callBack.sendResult(msg);
      }
      //回调接口
      public interface CallBack
      {
      public void sendResult(String result);
      }
      Activity中
      fragment.getEditText(new CallBack() {
      @Override
      public void sendResult(String result) {
      tv.setText(result);
      }
      });
    • Fragment向Fragment传值
      LeftFragment :
      //传值
      RightFragment fragment = new RightFragment();
      Bundle args = new Bundle();
      args.putString("name", data.get(position));
      fragment.setArguments(args);
      RightFragment:
      //取值
      Bundle bundle = getArguments();
      String name = bundle.getString("name");

    相关文章

      网友评论

        本文标题:Android之Fragment

        本文链接:https://www.haomeiwen.com/subject/ujzsettx.html