• Android基础知识 -- Fragment


    Fragment是android3.0后提供的API(所以android:minSdkVersion="11"以上版本),主要针对平板UI。有自己的生命周期,但是必须依附在Activity上,当Activity销毁后,Fragment也销毁。

    注意,在使用Fragment的Activity必须要继承FragmentActivity.

    1 生命周期

       Fragment

      -> onInflate()         //该方法只在我们直接用标签在布局文件中定义的时候才会被调用

      -> onAttach()         //当Fragment被添加到Activity中,只调用一次

      -> onCreate()          //创建Fragment,只会被调用一次

      -> onCreateView()       //每次创建,绘制该Fragment的View组件时,会将显示的View返回

      -> onActivityCreated()       //当Fragment所在的Activity启动完成

      -> onStart()          //启动Fragment被回调

      -> onResume()-> running   // 恢复Fragment,onStart()后,

      -> onPause()->pause    // Activity转到后台、Fragment被删除/替换、Fragment被添加到Back栈

      -> onStop()->stop       // 停止Fragment时回调

      -> onDestoryView()  // 销毁Fragment包含的View,如果此时从Back栈回滚到前台,会调用onCreateView()生命周期方法。

      -> onDestory()    // 销毁Fragment时

      -> onDetach()     // Fragment从Activity被删除/替换完成后回调该方法,onDestory()后肯定会执行此方法

      -> finish

    2 使用方式

      首先需要定义XML布局文件,此布局文件为Fragment子类的onCreateView()方法中加载。

      然后自定义Fragment类,继承Fragment或其子类,实现onCreateView()方法,在方法中通过inflater.inflate()方法加载xml布局文件。

      

    2.1 静态声明

        <1>  在需要加载Fragment的Activity的布局文件中,使用自定义Fragment标签,标签属性中: android:name="package.MyFragment"

        <2>  在setContentView()加载布局文件 

      

    2.2 动态代码

        <1>  获取FragmentManager实例,

        通过getFragmentManager()/getSupportFragmentManager(); (两种获取实例的差异在于Fragment相关类使用的是android.app包还是android.support.v4.app包)

        <2>  获取FragmentTransaction实例,fm.beginTransaction();

        <3>  调用add()/replace()方法加载Fragment( add(容器,fragment实例)、replace(viewId,fragment实例) )。

        <4>  调用fm.commit()方法提交事务。

    3 Fragment管理和事务

      

    3.1 Fragment管理

        Activity管理Fragment主要依靠FragmentManager

        findFragmenetById()       //获取指定Fragment

        popBackStack()         //弹出栈

        addToBackStack()         // 加入栈

        addOnBackStackChangedListener() // 监听后台栈变化    

      

    3.2 Fragment事务

        Fragment事务需要FragmentTransaction。

        FragmentTransaction ft = fm.beginTransaction();

        ft.add()

        ft.replace()

        ft.remove()

        ft.commit(); //最后需要提交事务

    4 交互

      

    4.1 获取组件

        <1> Fragment获取Activity中组件 :getActivity().findViewById(R.id.viewID);

        <2> Activity获取Fragment中组件 :getFragmentManager.findFragmentById(R.id.fragmentID); (也可以是用tag : findFragmentByTag())

      

    4.2 数据交互

        4.2.1 Activity -> Fragment
          在Activity中创建Bundle数据包,使用Fragment实例调用setArguments(bundle)将数据包传递给Fragment,Fragment中,调用getArguments()获得Bundle对象

        4.2.2 Fragment -> Activity

          在Fragment中定义一个回调接口,在Activity中实现接口,Fragment通过回调方法传递数据给Activity

          <1> fragment中代码:

            /*接口*/ 
            public interface CallBack{
            /*定义一个获取信息的方法*/
              public void getResult(String result);
            }

            /*接口回调*/         public void getData(CallBack callBack){         /*获取文本框的信息,当然你也可以传其他类型的参数,看需求咯*/         String msg = editText.getText().toString();         callBack.getResult(msg);         }
        

          <2> Activity中代码:

            /* 使用接口回调的方法获取数据 */

            leftFragment.getData(new CallBack() {

              @Override

              public void getResult(String result) {

                /*打印信息*/

                Toast.makeText(MainActivity.this, "-->>" + result, 1).show();

              }

            });    

        

    4.2.3 Fragment -> Fragment

         可以使用Activity为媒介,先从F1中得到数据,然后传入F2中。

  • 相关阅读:
    初次接触json...
    vector algorithm find
    网站安全(13) ——目录穿越漏洞(Directory Traversal)
    网站安全(20) —— 语义URL攻击
    网站安全(7) —— PHP文件包含漏洞介绍
    让PHP更快的提供文件下载
    PHP中关于include()和require() 的区别问题
    PHP中 获取全路径的文件的扩展名
    MySQL varchar计算:求列的数目和计算N的最大值
    jmeter使用分享
  • 原文地址:https://www.cnblogs.com/farmerkids/p/5550361.html
Copyright © 2020-2023  润新知