1。在Activity直接使用Fragment
在代码中使用
Test1Fragment fragment1=new Test1Fragment();
Test2Fragment fragment2=new Test2Fragment();
FragmentManager mgr=ge tFragmentManager();
FragmentTransaction ftTrans=mgr.beginTransaction();
ftTrans.add(R.id.content,fragment1);
ftTrans.add(R.id.content,fragment2);
ftTrans.show(fragment1);
ftTrans.commit();
也可在布局文件中使用占位view,使用replace(R.id.blank,fragment)
2.使用<fragment>标签
在XML中使用标签,通过class属性指明使用的Fragment子类型,getFragmentManager().findFragmentById()获取实例对象
3.结合ViewPager使用
使用FragmentActivity 对应Fragment使用v4包里的类
List<Fragment> lists=initFragments();
MyFragmentPagerAdapter mAdapter=new MyFragmentPagerAdapter(getSupportFragmentManager(),lists);
mViewPager.setAdapter(mAdapter);
mViewPager.setCurrentItem(0);
mViewPager.addOnPageChangeListener(XX);
MyFragmentPagerAdapter
private List<Fragment> lists;
...Constructor...
public int getCount(){
return lists.size();
}
public Fragment getItem(int position){
return lists.get(position);
}
注意点:
1/FragmentTransaction的hide,show方法不会触发Fragment的生命周期回调(面试问到过)
2.Fragment回收系统再次创建时只会调用默认无参的构造
3.FragmentPagerAdapter还有一个类似的类FragmentStatePagerAdapter,区别在于前者管理的Fragment对象会在当前页面一直存在(正常情况),FragmentStatePagerAdapter管理的Fragment在不可见的情况下可能会被销毁,只保留有限的(2个?)Fragment;前者的Fragment在切换Fragment时生命周期不会回调到OnDestroy()/OnDetach()
4.Frgment的重叠问题,Activity异常回收,系统重新启动Activity时会根据保存的信息回复Fragment
5.Frgment 生命周期回调是在Activity生命周期回调中触发的