關於Fragement的學習
1. 當Fragment與Activity發生關聯時呼叫。
//onCreateView(LayoutInflater, ViewGroup,Bundle)
如果使用Android3.0以下的版本,需要引入v4的包,然後Activity繼承FragmentActivity,
然後透過getSupportFragmentManager獲得FragmentManager。
2、Fragment家族常用的API
Fragment常用的三個類:
android.app.Fragment 主要用於定義Fragment
android.app.FragmentManager 主要用於在Activity中操作Fragment
android.app.FragmentTransaction 保證一些列Fragment操作的原子性,熟悉事務這個詞,一定能明白~
a、獲取FragmentManage的方式:
getFragmentManager() // v4中,getSupportFragmentManager
b、主要的操作都是FragmentTransaction的方法
FragmentTransaction transaction = fm.benginTransatcion();//開啟一個事務
3.往Activity中新增一個Fragment
transaction.add()
從Activity中移除一個Fragment,如果被移除的Fragment沒有新增到回退棧(回退棧後面會詳細說),這個Fragment例項將會被銷燬。
transaction.remove()
使用另一個Fragment替換當前的,實際上就是remove()然後add()的合體~
transaction.replace()
隱藏當前的Fragment,僅僅是設為不可見,並不會銷燬
transaction.hide()
顯示之前隱藏的Fragment
transaction.show()
會將view從UI中移除,和remove()不同,此時fragment的狀態依然由FragmentManager維護。
detach()
重建view檢視,附加到UI上並顯示。
attach()
提交一個事務
transatcion.commit()
注意:常用Fragment的哥們,可能會經常遇到這樣Activity狀態不一致:State loss這樣的錯誤。主要是因為:commit方法一定要在Activity.onSaveInstance()之前呼叫。
上述,基本是操作Fragment的所有的方式了,在一個事務開啟到提交可以進行多個的新增、移除、替換等操作。
值得注意的是:如果你喜歡使用Fragment,一定要清楚這些方法,哪個會銷燬檢視,哪個會銷燬例項,哪個僅僅只是隱藏,這樣才能更好的使用它們。
a、比如:我在FragmentA中的EditText填了一些資料,當切換到FragmentB時,如果希望會到A還能看到資料,則適合你的就是hide和show;也就是說,希望保留使用者操作的皮膚,你可以使用hide和show,當然了不要使勁在那new例項,進行下非null判斷。
b、再比如:我不希望保留使用者操作,你可以使用remove(),然後add();或者使用replace()這個和remove,add是相同的效果。
c、remove和detach有一點細微的區別,在不考慮回退棧的情況下,remove會銷燬整個Fragment例項,而detach則只是銷燬其檢視結構,例項並不會被銷燬。那麼二者怎麼取捨使用呢?如果你的當前Activity一直存在,那麼在不希望保留使用者操作的時候,你可以優先使用detach。
4.
主Activity向子Fragement傳值
主Activity
case 0:
if (inforf == null) {
inforf = new InformationFragment();
Bundle bundle1 = new Bundle();
bundle1.putString("device_id",device_id);
inforf.setArguments(bundle1);
lf.add(inforf);
transaction.add(R.id.ll_fragment, inforf);
}
子Fragement
Bundle bundle1 = getArguments();
jnr=bundle1.getString("jnr");
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2730/viewspace-2816599/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於SQLMAP的學習SQL
- 關於HTTP的學習HTTP
- 關於DDD的學習
- 關於學習
- 關於ModeAnalytics的學習
- 關於Fuzz——peach的學習
- banq:關於XML的學習XML
- 關於新框架的學習框架
- 關於axis的學習求教
- 關於學習之道
- 關於不可見索引的學習索引
- 關於connet by的學習
- 關於Struts的學習和使用
- 關於設計模式的學習設計模式
- 關於原始碼學習原始碼
- 關於法學考研(刑法),我的學習方法
- 關於http(自己的學習筆記)HTTP筆記
- 關於學習心態的調整
- 關於Apache Tika的學習和使用Apache
- 關於學習Mongodb的幾篇文章MongoDB
- 關於mongodb的學習與探索二MongoDB
- 關於exp/imp的總結學習
- 關於Android ant build的學習AndroidUI
- 關於 grouping sets 學習
- 關於OCP考題學習
- 關於強化學習、深度學習deeplearning研修強化學習深度學習
- 關於結構體型別的學習結構體型別
- Myth 關於Git的學習筆記Git筆記
- 關於我在學習Swoole的痛點
- 關於MySQL8的WITH查詢學習MySql
- 關於深度學習的一些技巧深度學習
- 關於學習的一些建議
- 向Zepto學習關於"偏移"的那些事
- 關於rac中的鎖簡單學習
- CSS學習——關於連結的屬性CSS
- 關於資料庫系統的學習資料庫
- 關於EJB的學習曲線的問題
- 關於定價過程的公式的學習公式