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布局。








     

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    22. Generate Parentheses (backTracking)
    21. Merge Two Sorted Lists
    20. Valid Parentheses (Stack)
    19. Remove Nth Node From End of List
    18. 4Sum (通用算法 nSum)
    17. Letter Combinations of a Phone Number (backtracking)
    LeetCode SQL: Combine Two Tables
    LeetCode SQL:Employees Earning More Than Their Managers
  • 原文地址:https://www.cnblogs.com/llxbl/p/6179679.html
Copyright © 2011-2022 走看看