一.
Fragment不能單獨(dú)使用,需添加到Activity中。有兩種添加方式,分別是布局文件和動(dòng)態(tài)添加。
動(dòng)態(tài)添加:首先獲取Fragment的實(shí)例對(duì)象,然后獲取FragmentManager對(duì)象,調(diào)用FragmentManager 的beginTransaction ()方法開啟事物并得到FragmentTransaction 對(duì)象,最后調(diào)用FragmentTransaction 的add()方法將Fragment添加到Activity中,并通過commit()方法提交事物。
//實(shí)例化Fragment對(duì)象
NewsListFragment fragment = new NewsListFragment ();
//獲取FragmentManager實(shí)例
FragmentManager fm = getFragmentManager();
//獲取FragmentTransaction實(shí)例
FragmentTransaction beginTransaction = fm.beginTransaction ();
//添加一個(gè)Fragment
beginTransaction .add(R.id.ll,fragment);
//提交
beginTransaction .commit();
add(int containerViewId , Fragment fragment)方法:第一個(gè)參數(shù)表示Fragment要放入ViewGroup的資源id,第二個(gè)參數(shù)是要添加的Fragment。
在Activity中獲取Fragment實(shí)例:
findFragmentById()方法用于從布局文件中獲取Fragment實(shí)例,參數(shù)為Fragment在Activity布局中的id。
SettingListFragment fListFragment = (SettingListFragment) getFragmentManager()
.findFragmentById(R.id.settingcontent);
在Fragment中獲取Activity實(shí)例:
MainActivity activity = (MainActivity) getActivity();
當(dāng)Fragment需要Conrext對(duì)象時(shí),也可以使用這個(gè)方法。
Fragment與Fragment之間的通信:
首先需要在Fragment中獲取Activity是實(shí)例對(duì)象,然后通過Activity實(shí)例獲取另外一個(gè)Fragment的實(shí)例,這樣就實(shí)現(xiàn)了Fragment與Fragment之間的通信了。
二.
add() 與 replace() 兩種方式添加:
add() :以add方式加入Fragment,底層的Fragment被覆蓋,當(dāng)按下返回鍵時(shí),當(dāng)前Fragment彈出返回棧,底層Fragment直接顯示出來,無需重建。
replace() :以replace方式加入Fragment,底層Fragment被替換(replace嘛),當(dāng)按下返回鍵時(shí),當(dāng)前Fragment彈出返回棧,底層Fragment需要重建。然后再顯示出來。
fragment的 隱藏hide()、顯示show():
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.hide(mFragment1); //隱藏
transaction.show(mFragment2); //顯示
transaction.commit();
注意每一次顯示和隱藏都要重新創(chuàng)建
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
Tag
activity.ft.add(R.id.fLayout_content, fragment_Mine ,"666");
使用tag的好處是后續(xù)我們可以從FragmentManager中查找Fragment對(duì)象。
Fragment fragment = getSupportFragmentManager().findFragmentByTag("666");
executePendingTransactions() 方法:
commit()方法并不立即執(zhí)行transaction中包含的動(dòng)作,而是把它加入到UI線程隊(duì)列中.如果想要立即執(zhí)行,可以在commit之后立即調(diào)FragmentManager的executePendingTransactions()方法。
activity.ft.commit();
activity.getFragmentManager().executePendingTransactions();