關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於ModeAnalytics的學習
- 關於HTTP的學習HTTP
- 關於SQLMAP的學習SQL
- 關於SCRUM的學習心得Scrum
- 關於學習之道
- 【機器學習基礎】關於深度學習的Tips機器學習深度學習
- 關於http(自己的學習筆記)HTTP筆記
- 關於Apache Tika的學習和使用Apache
- Myth 關於Git的學習筆記Git筆記
- 關於學習心態的調整
- 關於法學考研(刑法),我的學習方法
- 關於強化學習、深度學習deeplearning研修強化學習深度學習
- 關於結構體型別的學習結構體型別
- 關於資料結構的學習心得資料結構
- 關於MySQL8的WITH查詢學習MySql
- Jetpack Compose學習(6)——關於Modifier的妙用Jetpack
- 關於學習的一些建議
- 關於我在學習Swoole的痛點
- 關於深度學習的一些技巧深度學習
- git學習:關於origin和masterGitAST
- 關於社會機器學習機器學習
- 關於學習Web前端所需要的學習資料(免費送)Web前端
- golang中關於死鎖的思考與學習Golang
- 關於深度學習的一些淺見深度學習
- 從《守望先鋒》學習關於ECS的概述
- 關於django reset_framework學習之路的筆記DjangoFramework筆記
- 關於強化學習需要了解的知識強化學習
- 關於機器學習需要了解的知識機器學習
- 關於“學習金字塔理論”的所思所想
- 深入淺出eslint——關於我學習eslint的心得EsLint
- 關於人工智慧深度學習的那些事兒人工智慧深度學習
- Spring學習01--初學者關於AOP和DI的理解Spring
- 【機器學習】關於機器學習那些你不知道的“民間智慧”機器學習
- XML學習筆記(一):關於字元編碼的理解XML筆記字元
- 叮,關於NPL與深度學習的“乾貨”請查收!深度學習
- 一個關於組隊精進學習的構思
- 關於學習Python的疑問,你都清楚了嗎?Python
- 關於linux多執行緒fork的理解和學習Linux執行緒