Android布局 Fragment

一.

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();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容