類似案例:
微信 網(wǎng)易新聞
解決問題:
在多個(gè)Fragment需要加載的時(shí)候,啟動(dòng)速度往往會(huì)變慢.分析會(huì)發(fā)現(xiàn)并非所有的Fragment都需要第一時(shí)間將數(shù)據(jù)填充完畢.因?yàn)樗鼈兌歼€沒有被用戶所"看見".所以我們要達(dá)到的效果是Fragment被顯示后才加載數(shù)據(jù)(lazy load).LazyFragment由此誕生....鼓掌~~~~~~~~~~例:Toolbar + ViewPager + Fragment
使用說明:
extends BaseFragment其他生命周期的方法需要重寫 就自己overwrite
protected abstract View initViews(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
與 onCreateView 類似.initViews 是只要 Fragment 被創(chuàng)建就會(huì)執(zhí)行的方法.也就是說如果我們不想用 LazyLoad 模式則把所有的初始化 和 加載數(shù)據(jù)方法都寫在 initViews 即可.
protected abstract void initData();
若將代碼寫在initData中,則是在Fragment真正顯示出來后才會(huì)去Load.
注意事項(xiàng):
sample很簡單.代碼注釋也寫的很清楚有個(gè)FragmentTransaction的坑,在BaseFragment文件注釋中有說明(注2部分)這里還是貼出來吧
/**
* <pre>
* 若把初始化內(nèi)容放到initData實(shí)現(xiàn)
* 就是采用Lazy方式加載的Fragment
* 若不需要Lazy加載則initData方法內(nèi)留空,初始化內(nèi)容放到initViews即可
* * 注1:
* 如果是與ViewPager一起使用椒振,調(diào)用的是setUserVisibleHint。
* * 注2:
* 如果是通過FragmentTransaction的show和hide的方法來控制顯示梧乘,調(diào)用的是onHiddenChanged.
* 針對(duì)初始就show的Fragment 為了觸發(fā)onHiddenChanged事件 達(dá)到lazy效果
* 需要先hide再show
* eg:
* transaction.hide(aFragment);
* transaction.show(aFragment);
* * Created by Mumu
* on 2015/11/2.
* </pre>
*/