Fragment常用的三個類:
android.app.Fragment 主要用于定義Fragment
android.app.FragmentManager 主要用于在Activity中操作Fragment
android.app.FragmentTransaction 保證一些列Fragment操作的原子性
獲取FragmentManage的方式:
getFragmentManager()
getSupportFragmentManager //v4中FragmentActivity
主要的操作都是FragmentTransaction的方法
FragmentTransaction transaction = fm.benginTransatcion();//開啟一個事務(wù)
transaction.add() //往Activity中添加一個Fragment
transaction.remove() //從Activity中移除一個Fragment捎废,如果被移除的Fragment沒有添加到回退棧(回退棧后面會詳細(xì)說)凌停,這個Fragment實例將會被銷毀刑巧。
transaction.replace()//使用另一個Fragment替換當(dāng)前的移层,實際上就是remove()然后add()的合體
transaction.hide() //當(dāng)你的fragment數(shù)量固定很少時隱藏當(dāng)前的Fragment,僅僅是設(shè)為不可見洁闰,并不會銷毀塘慕,多的時候可能出現(xiàn)OOM異常,
transaction.show()//顯示之前隱藏的Fragment
transaction.detach()//會將view從UI中移除,和remove()不同,此時fragment的狀態(tài)依然由FragmentManager維護。
transaction.attach()//重建view視圖,附加到UI上并顯示税手。
transatcion.commit()//提交一個事務(wù)
如果你喜歡使用Fragment蜂筹,一定要清楚這些方法,哪個會銷毀視圖芦倒,哪個會銷毀實例艺挪,哪個僅僅只是隱藏,這樣才能更好的使用它們兵扬。
a麻裳、比如:我在FragmentA中的EditText填了一些數(shù)據(jù),當(dāng)切換到FragmentB時器钟,如果希望會到A還能看到數(shù)據(jù)津坑,則適合你的就是hide和show;也就是說傲霸,希望保留用戶操作的面板疆瑰,你可以使用hide和show,當(dāng)然了不要使勁在那new實例昙啄,進行下非null判斷穆役。
b、再比如:我不希望保留用戶操作梳凛,你可以使用remove()耿币,然后add();或者使用replace()這個和remove,add是相同的效果韧拒。
c淹接、remove和detach有一點細(xì)微的區(qū)別,在不考慮回退棧的情況下叭莫,remove會銷毀整個Fragment實例蹈集,而detach則只是銷毀其視圖結(jié)構(gòu),實例并不會被銷毀雇初。
那么二者怎么取舍使用呢?如果你的當(dāng)前Activity一直存在减响,那么在不希望保留用戶操作的時候靖诗,你可以優(yōu)先使用detach。