关于getChildFragmentManager()、 getFragmentManager()、getSupportFragmentManager()的使用
来源:互联网 发布:畅言教学软件 编辑:程序博客网 时间:2024/04/30 16:44
Fragment的使用在目前的开发中会经常用到,因为他有自己完整的生命周期,更方便和灵活的使用,已改以前自定义View带来的维护成本。使用Fragment需要熟悉几个类,包括FragmentActivity、FragmentManager、 FragmentTranscation,一个FragmentActivity可以包含多个Fragment,谁来管理? FragmentManager就起到了作用。做Fragment的增加、删除、替换的时候,事务FragmentTranslation 来负责执行。
getFragmentManager()和getSupportFragmentManager()的区别很容易理解,android的v4扩展包中的FragmentActivity中获取FragmentManager使用的就是getSupportFragmentManager(),android.app中获取管理类的方法就是getFragmentManager()。
然后getChildFragmentManager()和getFragmentManager()属于两个不同的类,前者属于Fragment,看源码:
/** * Return a private FragmentManager for placing and managing Fragments * inside of this Fragment. */ final public FragmentManager getChildFragmentManager() { if (mChildFragmentManager == null) { instantiateChildFragmentManager(); if (mState >= RESUMED) { mChildFragmentManager.dispatchResume(); } else if (mState >= STARTED) { mChildFragmentManager.dispatchStart(); } else if (mState >= ACTIVITY_CREATED) { mChildFragmentManager.dispatchActivityCreated(); } else if (mState >= CREATED) { mChildFragmentManager.dispatchCreate(); } } return mChildFragmentManager; }
android官方对它的解释是,返回一个FragmentManager为了设置和管理当前Fragment内部的Fragment的们。举个例子,在我的Fragment布局中添加了一个Fragment容器,我的目的是在Fragment执行的过程中动态的添加一个Fragment,并且对他进行操作,上XML代码:
<FrameLayout android:id="@+id/frameContainer" android:layout_width="match_parent" android:layout_height="238dp" android:visibility="gone"> <!--<fragment--> <!--android:name="com.duomi.oops.postandnews.fragment.InputAddPhotoFragment"--> <!--android:id="@+id/inputAddPhotoFragment"--> <!--android:layout_width="match_parent"--> <!--android:layout_height="match_parent" />--> </FrameLayout>
动态添加Fragment区别于在上面的代码中注销掉的部分。为了满足我上面说的需求和条件,我需要这样写我的代码:
fragmentManager = getChildFragmentManager(); inputAddPhotoFragment = new InputAddPhotoFragment(); FragmentTransaction ft = fragmentManager.beginTransaction(); ft.add(R.id.frameContainer, inputAddPhotoFragment); ft.commitAllowingStateLoss(); fragmentManager.executePendingTransactions();
因为InputAddPhotoFragment属于我当期的Fragment,所以需要用我当前Fragment的FragmentManager去管理,而不是使用Activity的FragmentManager去管理。使用到的获取方法 就是getChildFragmetManager()。
最后我们来看一下getFragmentManager()的源码,它是属于FragmentActivity,代码如下:
/** * Return the FragmentManager for interacting with fragments associated * with this activity. */ public FragmentManager getSupportFragmentManager() { return mFragments; }看它的官方注释,是为了获取能管理和当前Activity有关联的Fragment的FragmentManager。
总结,需要管理相互独立的并且隶属于Activity的Fragment使用FragmentManager(),而在Fragment中动态的添加Fragment要使用getChildFragmetManager()来管理。
- 关于getChildFragmentManager()、 getFragmentManager()、getSupportFragmentManager()的使用
- 关于getChildFragmentManager()、 getFragmentManager()、getSupportFragmentManager()的使用
- 关于getChildFragmentManager()、 getFragmentManager()、getSupportFragmentManager()的使用
- 关于getChildFragmentManager()、 getFragmentManager()、getSupportFragmentManager()的使用
- getChildFragmentManager()、 getFragmentManager()、getSupportFragmentManager()的区别
- 区别getFragmentManager、getSupportFragmentManager和getChildFragmentManager
- 区别getFragmentManager、getSupportFragmentManager和getChildFragmentManager
- android getFragmentManager、getSupportFragmentManager、getChildFragmentManager理解
- getFragmentManager 、getSupportFragmentManager 与getChildFragmentManager三者之间的区别
- 关于getFragmentManager与getChildFragmentManager
- getChildFragmentManager和getSupportFragmentManager的区别
- getFragmentManager和getSupportFragmentManager的区别
- getFragmentManager和getSupportFragmentManager的区别
- getFragmentManager()和getSupportFragmentManager()的区别
- fragment的getChildFragmentManager与getFragmentManager方法
- getFragmentManager和getSupportFragmentManager的区别是?
- getFragmentManager()和getSupportFragmentManager()的选择问题
- 安卓开发之详解getChildFragmentManager和getsupportFragmentManager和getFragmentManager详解
- GDB 调试 STL
- 重装Windows 7后,Ubuntu 13.04 引导修复方法
- android android.app.SuperNotCalledException错误
- 学习笔记 提取常量和一个简单的聊天系统(python)from python基础教程
- 性能测试工具ab的使用
- 关于getChildFragmentManager()、 getFragmentManager()、getSupportFragmentManager()的使用
- cdoj 1131 区间dp
- Maximum Depth of Binary Tree
- jar包生成说
- BZOJ1150 数据备份
- 资料翻译--Rockstor配置Openvpn
- UI组件之UIWebView学习
- jquery 实时计算用户输入的字数
- hive概念