zoukankan      html  css  js  c++  java
  • Fragment

    Fragment称之为碎片,可以让程序更加合理充分的利用大屏幕,甚至可以将其理解为一个迷你activity。

    一、Fragment的简单使用方法:

         1.1 编写Fragment布局文件,与普通布局文件没有区别。

      1.2 编写自定义Fragment类,继承自Fragment,重写onCreateView方法,例如:

              public class LeftFragment extends Fragment {

              @Override

               public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

                View view = inflater.inflate(R.layout.left_fragment,container,false);

                 return view;
    }
    }
    1.3 在要使用Fragment的activity布局文件中引入定义好的Fragment,例如:

      <fragment

      android:id="@+id/right_fragment"
      android:name="com.example.fragmenttest.RightFragment"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:layout_weight="1" />

      这里需要通过name属性显示指定要添加的碎片的类名,一定要将类的包名也加上。
    二、动态加载碎片步骤
      2.1创建待添加的碎片的实例。
      2.2获取FragmentManager,在活动中可以直接调用getFragmentManager()方法得到。
      2.3开启一个事务,通过电泳beginTansaction()方法开启。
      2.4向容器中加入碎片,一般用replace()方法实现,传入容器的ID和要添加的碎片实例。
      2.5提交事务,用commit()实现。
      代码示例:

        public void onClick(View v) {
          switch (v.getId()) {
            case R.id.button:
            AnotherRightFragment fragment = new AnotherRightFragment();
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction transaction = fragmentManager.beginTransaction();
            transaction.replace(R.id.right_layout, fragment);
            transaction.commit();
            break;
            default:
            break;
          }
        }

    三、在碎片中模拟返回栈
      
    FragmentTansaction提供一个addToBackStack()方法,可以用于将一个事务加入返回栈中,这样在动态加载的碎片时,按back键可以返回上一个碎片而不是直接退出activity。示例如下:

      public void onClick(View v) {
      switch (v.getId()) {
          case R.id.button:
          AnotherRightFragment fragment = new AnotherRightFragment();
          FragmentManager fragmentManager = getFragmentManager();
          FragmentTransaction transaction = fragmentManager.beginTransaction();
          transaction.replace(R.id.right_layout, fragment);
          transaction.addToBackStack(null);
          transaction.commit();

          break;

          default:
          break;
        }
      }

    四、碎片与活动之间进行通信

      为了方便碎片与活动进行通信,Fragmanager提供一个类似于findViewById()的方法,专门用于从布局文件中获取碎片实例,代码如下:

      RightFragment  rightFragment = (RightFragment)getFragmentManager().findFragmentById(R.id.right_fragment);

      在活动中获取了碎片实例,当然可以轻松的调用碎片里的方法。

      在碎片中中可以通过getActivity()方法获取当前碎片相关连的活动实例,有了活动实例在碎片中调用活动里的方法就轻而易举了。

      MainActivity activity = (MainActivity) getActivity();

    五、碎片的生命周期

      5.1 碎片的状态与回调

        5.1.1 运行状态,当一个碎片可见时,并且它所关联的活动处于运行状态,该碎片也处于运行状态。

        5.1.2 暂停状态 当一个活动处于暂停状态时,它所关联的碎片也处于暂停状体。

        5.1.3 停止状态 当一个活动进入停止状态时与她关联的碎片也进入停止状态,或者通过调用FragmentTansaction的remove(),replace()方法将碎片移除,但有在事务提交之前并调用addToBackStack()方法,这是碎片也进入停止状态。

        5.1.4销毁状态 当一个活动进入销毁状态时与它相关联的碎片也进入销毁状态,或者通过调用FragmentTansaction的remove(),replace()方法将碎片移除,但在事务提交之前没有调用addToBackStack()方法,这是碎片也进入销毁状态。

      5.2 常用回调函数

        5.2.1onAttach():碎片与活动建立关联的时候调用。

        5.2.2onCreateView:位碎片创建(加载)视图时候调用

        5.2.3 onActivityCreated()在确保与碎片相关联的活动一定创建完毕的时候调用。

        5.2.4 onDestroyedView()当碎片关联的视图被移除的时候调用。

        5.2.5onDetach():当碎片与活动解除关联的时候调用。

    六、动态加载布局

      根据设备的分辨率或者屏幕大小在运行时决定加载哪个布局。

      6.1使用限定符

      Android常用的限定符:

      屏幕大小相关的:

          限定符              描述

          small      提供给小屏幕的资源;

          normal           提供给中等屏幕的资源;

          large     提供给大屏幕的资源;

          xlarge    提供给超大屏幕的资源;

      屏幕分辨率相关的:

          限定符    描述

          ldpi     提供给分辨率低设备的资源(120dpi以下)

          mdpi    提供给中等分辨率设备的资源(120到160dpi)

          hdpi    提供给高分辨率设备的资源(120到240dpi)

          xhdpi    提供给超分辨率设备的资源(240到320dpi)

      与屏幕方向有关的

          限定符    描述

          land    提供给横屏设备的

          Port    提供给竖屏设备的。

      6.2 最小宽度限定符

        最小宽度限定符允许我们对屏幕宽度指定一个最小值(以dp),为单位,然后以这个最小值为临界点,屏幕宽度大于这个值的设备加载一个布局,而屏幕宽度小于这个值的设备加载另一个布局。

      例如 在res目录下新建一个layout-sw600dp文件夹,然后再这个文件夹下新建一个activity_main.xml,当屏幕宽度大于600dp的时候就会加载layout-sw600dp/activity_main.xml布局。








     

  • 相关阅读:
    bzoj1568: [JSOI2008]Blue Mary开公司
    bzoj3301: [USACO2011 Feb] Cow Line
    bzoj4745: [Usaco2016 Dec]Cow Checklist
    bzoj4746: [Usaco2016 Dec]Lasers and Mirrors
    bzoj2982: combination
    bzoj1822: [JSOI2010]Frozen Nova 冷冻波
    bzoj1027: [JSOI2007]合金
    bzoj 2004
    bzoj 3110&&codevs 1616
    bzoj 2134
  • 原文地址:https://www.cnblogs.com/llxbl/p/6179679.html
Copyright © 2011-2022 走看看