最近寫了一個項目,使用開源中國的架構。整個項目就定義兩個Activity,一個首頁Activity,一個容器Activity。利用反射技術在容器Activity裡裝Fragment。一開始,我還切以為喜,但是為什麼這個世界是辯證的呢?
1)Activity裡有launchMode,Fragment沒有,也是說Activity由棧來維護了,但是Fragment沒有,
不過也可以用Stack自己來實作。容器Activity的launchMode不能寫死,要轉換成裡面Fragment的
launchMode。
2)Activity有key相關的事件,Fragment沒有,如果要在Fragment裡監聽,需要從Activty裡傳遞。
3)Fragment不需要注冊
4)Fragment比較輕量化
5)Fragment必需要依賴于Activity
6)請看官方Fragment的生命周期方法的描述,與Activity是的生命周期是息息相關的。如果主界面
由幾個Fragment組成,通過hide和show來組織Fragment,當show的時候,Fragment會自動的執行
onStart與onResume方法,也就是Activity在show會走所有Fragment的這兩個方法。而這兩個方法
經常用于自動請求網絡資料,那麼即使Fragment沒有“正直可見”卻走了這兩個方法,解決如下
我的代碼,在BaseFragment裡設定一下:
<code>@Override</code>
<code>public</code> <code>void</code> <code>onResume() {</code>
<code> </code><code>super</code><code>.onResume();</code>
<code> </code><code>//可見才去加載資料</code>
<code> </code><code>if</code><code>(!isHidden()){</code>
<code> </code><code>onLazyLoad();</code>
<code> </code><code>}</code>
<code>}</code>
然後在onLazyLoad裡即可進行請求網絡的操作。
本文轉自屠夫章哥 51CTO部落格,原文連結:http://blog.51cto.com/4259297/1737956,如需轉載請自行聯系原作者