一.
Fragment不能单独使用,需添加到Activity中。有两种添加方式,分别是布局文件和动态添加。
动态添加:首先获取Fragment的实例对象,然后获取FragmentManager对象,调用FragmentManager 的beginTransaction ()方法开启事物并得到FragmentTransaction 对象,最后调用FragmentTransaction 的add()方法将Fragment添加到Activity中,并通过commit()方法提交事物。
//实例化Fragment对象
NewsListFragment fragment = new NewsListFragment ();
//获取FragmentManager实例
FragmentManager fm = getFragmentManager();
//获取FragmentTransaction实例
FragmentTransaction beginTransaction = fm.beginTransaction ();
//添加一个Fragment
beginTransaction .add(R.id.ll,fragment);
//提交
beginTransaction .commit();
add(int containerViewId , Fragment fragment)方法:第一个参数表示Fragment要放入ViewGroup的资源id,第二个参数是要添加的Fragment。
在Activity中获取Fragment实例:
findFragmentById()方法用于从布局文件中获取Fragment实例,参数为Fragment在Activity布局中的id。
SettingListFragment fListFragment = (SettingListFragment) getFragmentManager()
.findFragmentById(R.id.settingcontent);
在Fragment中获取Activity实例:
MainActivity activity = (MainActivity) getActivity();
当Fragment需要Conrext对象时,也可以使用这个方法。
Fragment与Fragment之间的通信:
首先需要在Fragment中获取Activity是实例对象,然后通过Activity实例获取另外一个Fragment的实例,这样就实现了Fragment与Fragment之间的通信了。
二.
add() 与 replace() 两种方式添加:
add() :以add方式加入Fragment,底层的Fragment被覆盖,当按下返回键时,当前Fragment弹出返回栈,底层Fragment直接显示出来,无需重建。
replace() :以replace方式加入Fragment,底层Fragment被替换(replace嘛),当按下返回键时,当前Fragment弹出返回栈,底层Fragment需要重建。然后再显示出来。
fragment的 隐藏hide()、显示show():
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.hide(mFragment1); //隐藏
transaction.show(mFragment2); //显示
transaction.commit();
注意每一次显示和隐藏都要重新创建
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
Tag
activity.ft.add(R.id.fLayout_content, fragment_Mine ,"666");
使用tag的好处是后续我们可以从FragmentManager中查找Fragment对象。
Fragment fragment = getSupportFragmentManager().findFragmentByTag("666");
executePendingTransactions() 方法:
commit()方法并不立即执行transaction中包含的动作,而是把它加入到UI线程队列中.如果想要立即执行,可以在commit之后立即调FragmentManager的executePendingTransactions()方法。
activity.ft.commit();
activity.getFragmentManager().executePendingTransactions();