zoukankan      html  css  js  c++  java
  • Fragment

    Android3.0新增的Fragment类,特性:

    1、程序的运行界面可以由多个Fragment组成;

    2、每个Fragment都有各自独立的运行状态,并且接受各自的处理事件;

    3、在程序运行的过程中,Fragment可以动态地加入和移除。

    使用Fragment的步骤:

    1、新增一个继承Fragment的新类;

    2、加入需要处理的状态转换方法:

    onCreate():当Fragment刚被建立时运行,可以在其中完成变量的初始设置;

    onCreateView():当Fragment将要显示在屏幕上时运行,必须在其中设置接口

    onPause():当Fragment要从屏幕中消失时运行,可以在其中存储用户操作状态和资料,以便下次Fragment重新显示时继续之前的工作。

    public class Fragment1 extends Fragment{
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
                View view = inflater.inflate(R.layout.fragment1, container,false);
                return view;
                }
    }

    3、在主程序布局文件中加入<fragment>标签:

    <FrameLayout android:layout_weight="1"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:background="?android:attr/detailsElementBackground"
    >
    <fragment android:id="@+id/fra"
         android:name="com.fragment.fragment1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"    
    >
    </fragment>
    </FrameLayout>

    注意:

    1、fragment的开头字母必须是小写;

    2、每个fragment标签都必须设置id属性;

    3、fragment中的name属性是指定所使用的Fragment类,且必须加上完整的组件路径名称;

    4、使用layout_weight属性时,以设置比例方式控制宽度,此时layout_width必须设置为0dp;

    FragmentManager对象提供三个控制Fragment的方法:

    1、add():把Fragment加入程序的操作接口

    2、remove():从程序的操作接口中移除指定的Fragment

    3、replace():用新的Fragment取代程序界面中的Fragment

    //取得FragmentManager对象
    FragmentManager fragMgr = getFragmentManager();
    //建立FragmentTransaction对象记录操作
    FragmentTransaction fragTran = fragMgr.beginTransaction();
    Fragment1 frag1 = new Fragment1();
    Fragment2 frag2 = new Fragment2();
    //使用FragmentTransaction控制Fragment
    /*
     *第一个参数为指定要将Fragment加入哪一个接口组件中
     *第二个参数为Fragment对象
     *第三个参数为Tag
    */
    fragTran.add(R.id.framelayout, frag1 ,"My Fragment1");
    fragTran.replace(R.id.framelayout, frag2 ,"My Fragment2");
    Fragment2 frag_2 = (Fragment2)fragMgr.findFragmentByTag("My Fragment2");
    fragTran.remove(frag_2);
    //更新处理流程
    fraTran.commit();
    //也可用匿名对象简化
    //replace()第一次使用和add()结果一样
    //getFragmentManager().beginTransaction().replace(R.id.framelayout, frag2 ,"My Fragment2").commit();

    Fragment 与 Activity 之间的callback机制

    1、在Fragment中定义一个Interface,其中包含需要由Main类提供的callback方法

    1 public class Fragment1 extends Fragment {
    2     public interface CallbackInterface {
    3        public void method1(...);
    4        public void method2(...);
    5        ...
    6 };
    7 }

    2、在Main类中实现CallbackInterface

    public class Main extends Activity implements Fragment1.CallbackInterface {
             public void method1(...) {
              ...
             }
             public void method2(...) {
              ...
             }
    }

    3、Main类中的callback方法传给Fragment1,可在Fragment1中的onAttach()中完成

     1 public class Fragment1 extends Fragment {
     2      ...
     3      private CallbackInterface mCallback;
     4          @Override
     5     public void onAttach(Activity activity) {
     6         // TODO Auto-generated method stub
     7         super.onAttach(activity);
     8        try {
     9                mCallback = (CallbackInterface)activity;
    10     }catch (ClassCastException e){
    11            throw new ClassCastException(activity.toString() + "must implement Fragment1.CallbackInterface.");
    12     }
    13     }
  • 相关阅读:
    魔方
    js烟花特效
    面试cookie
    扩展日期插件
    通过javascript实现1~100内能同时被2和3整除的数并生成如下表格
    用三或四个个div标签实现工字效果
    2015_WEB页面前端工程师_远程测题_东方蜘蛛_1
    js公有、私有、静态属性和方法的区别
    Docker libnetwork(CNM)设计简介
    kubernetes,Docker网络相关资料链接
  • 原文地址:https://www.cnblogs.com/ghimtim/p/4761617.html
Copyright © 2011-2022 走看看