我們都知道fragment切換有兩種方式:
1. replace方式
transaction.replace(r.id.content, fragment1);
2. add-hide-show方式
transaction.add(r.id.content, fragment1); transaction.hide(fragment2); transaction.show(fragment1);
來看一下使用add切換時候的生命週期:
載入fragment1
fragment1 oncreate
fragment1 oncreateview
fragment1 onstart
fragment1 onresume
用以下**切到fragment2:
fragmenttransaction ft = getfragmentmanager().begintransaction();
ft.hide(fragment1);
ft.add(r.id.******_fragment, fragment2);
ft.settransition(fragmenttransaction.transit_fragment_open);
ft.commit();
fragment1不走任何生命週期,但會調onhiddenchanged方法
fragment2 oncreate
fragment2 oncreateview
fragment2 onstart
fragment2 onresume
回到fragment1,hide fragment2:
fragmenttransaction ft = getfragmentmanager().begintransaction();
if(!fragment1.isadd())else
ft.hide(fragment2);
ft.settransition(fragmenttransaction.transit_fragment_open);
ft.commit();
fragment1還是不走任何生命週期,調onhiddenchanged方法
fragment2 onpause
fragment2 onstop
fragment2 ondestoryview
fragment2 ondestory
用這種方法切換,fragment在隱藏時並不會走ondestoryview,所以顯示時也不會走oncreateview,所有view都一直儲存在記憶體中。
用replace方法:
載入fragment1生命週期與上面相同:
fragment1 oncreate
fragment1 oncreateview
fragment1 onstart
fragment1 onresume
切到fragment2:
fragmenttransaction ft = getfragmentmanager().begintransaction();
ft.replace(r.id.******_fragment, fragment2);
ft.settransition(fragmenttransaction.transit_fragment_open);
ft.commit();
這次的fragment1走生命週期了
fragment1 onpause
fragment1 onstop
fragment1 ondestoryview
fragment1 ondestory
fragment2 oncreate
fragment2 oncreateview
fragment2 onstart
fragment2 onresume
可以看到,fragment1走了ondestory,被完全**了!
再切回到fragment1
fragmenttransaction ft = getfragmentmanager().begintransaction();
ft.replace(r.id.******_fragment, fragment1);
ft.settransition(fragmenttransaction.transit_fragment_open);
ft.commit();
fragment1 oncreate
fragment1 oncreateview
fragment1 onstart
fragment1 onresume
fragment2 onpause
fragment2 onstop
fragment2 ondestoryview
fragment2 ondestory
fragment1因為已經被**,又走oncreate,fragment2被**。
Fragment 切換的兩種方式
我們都知道fragment切換有兩種方式 1.replace方式 transaction.replace r.id.content,fragment1 2.add hide show方式 transaction.add r.id.content,fragment1 transaction.hide ...
scrapy User Agent切換的兩種方法
第一種是使用在setting裡面設定middlewares。這個網上有較多版本,我覺得這個版本寫的比較好,也比較新。有的舊版本還在使用scrapy.contrib.middleware。scrapy新的版本裡已經不用contrib了,直接寫scrapy.middleware就可以了。note 另外為...
C DLL匯出的兩種方式和鏈結的兩種方式
第一種 匯出方式 extern c declspec dllexport int plus int x,int y extern c declspec dllexport int sub int x,int y extern c declspec dllexport int mul int x,in...