Fragment有自己的生命周期,但是不能独立使用,要加载到activity中使用。
优点
(1)fragment相比activity更节省内存。
(2)能动态灵活的加载到Activity中去配合viewpager使用,UI切换更方便舒适。
(1)静态加载,fragment作为标签加载到activity的布局文件中
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
(2)动态加载
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
DemoFragment fragment = new DemoFragment();
fragmentTransaction.add(R.id.content, fragment);//容器资源作为标志位,把fragment添加到对应的位置
fragmentTransaction.addToBackStack("DemoFragment");
fragmentTransaction.commit();
FragmentPagerAdapter适用于页面较少的情况
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
if (DEBUG) Log.v(TAG, "Detaching item #" + getItemId(position) + ": f=" + object
+ " v=" + ((Fragment)object).getView());
mCurTransaction.detach((Fragment)object);
}
FragmentStatePagerAdapter适用于页面较多的情况,每次切换回收内存
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Fragment fragment = (Fragment) object;
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
if (DEBUG) Log.v(TAG, "Removing item #" + position + ": f=" + object
+ " v=" + ((Fragment)object).getView());
while (mSavedState.size() <= position) {
mSavedState.add(null);
}
mSavedState.set(position, fragment.isAdded()
? mFragmentManager.saveFragmentInstanceState(fragment) : null);
mFragments.set(position, null);
mCurTransaction.remove(fragment);
}
参考自:https://blog.csdn.net/i_wait_for_you/article/details/70240075
https://www.cnblogs.com/LangZXG/p/6501839.html
https://blog.csdn.net/superjunjin/article/details/44783279
由于Fragment依赖Activity的存在而存在,故在创建时Activity生命周期中的方法均先于Fragment生命周期中的方法执行;相反,在销毁时,是先执行Fragment生命周期中的方法再执行Activity生命周期中的方法。
在Fragment中调用Activity中的方法 getActivity
在Fragment中调用Fragment中的方法 接口回调
在Fragment中调用Fragment中的方法 findFragmentById
在Fragment间利用广播
参考自 https://blog.csdn.net/u012702547/article/details/49786417
参考自 https://blog.csdn.net/harvic880925/article/details/44927375(详细清晰 写的太棒了)
add:添加Fragment,置于栈顶
replace:替换Fragment,清空对应容器Fragment,置于栈顶
remove:移除Fragment,显示下层Fragment
addToBackStack:添加事务
到回退栈,置于栈顶
popBackStack:将最上层的事务
弹出回退栈(根据具体参数,可以回退到对应的事务)
Fragment回滚以事务
(FragmentTransaction)为单位,一个事务可能包含一个或多个Fragment
Fragment拓展阅读
Fragment全解析系列(一):那些年踩过的坑
Square:从今天开始抛弃Fragment吧!