雖然文章多如牛毛,但是還是記錄一下了 效果圖首先已經進入了首頁,每次進入頁面都會有個toast彈出提示,當點擊第二個菜單,toast彈出,在次點擊第一個菜單,因為已經載入過了,所以不彈出,在次點擊第二個菜單,同理,在點擊第三個菜單,第一次點擊,彈出 實現也比較簡單 首先繼承自己的base類 定義三個 ...
雖然文章多如牛毛,但是還是記錄一下了
效果圖首先已經進入了首頁,每次進入頁面都會有個toast彈出提示,當點擊第二個菜單,toast彈出,在次點擊第一個菜單,因為已經載入過了,所以不彈出,在次點擊第二個菜單,同理,在點擊第三個菜單,第一次點擊,彈出
實現也比較簡單
首先繼承自己的base類
定義三個變數,是否載入好:isPrepared 是否顯示:isVisible 是否載入完:isLoad
然後在相應的位置改變變數的狀態
然後實現你的base中的方法,在init方法里添加toast,運行看看是否會多次載入
運行後你或許會發現第一次預設進入頁面的fragment沒有被調用方法,這顯然不是我們希望的,所以還得在加一段代碼,讓預設載入的fragment也應該被調用,並且只調用一次。只需要如下圖調用上面定義的顯示方法就可以了
在次運行,發現和上面的效果圖一樣的效果了,這裡懶載入就全部完成
public abstract class LazyFragment extends BaseFragment { protected boolean isLoad = false;//是否載入完 protected EmptyLayout emptyLayout; @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); onVisible(); } /** * 在這裡實現Fragment數據的緩載入. */ @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(getUserVisibleHint()) { isVisible = true; onVisible(); } else { isVisible = false; } } /**可見時調用*/ protected void onVisible(){ if(!isPrepared || !isVisible || isLoad) { return; } init(); isLoad = true;//載入完後更改狀態,只限定載入一次 Log.e("tag","onVisible"); } @Override public void onDestroyView() { super.onDestroyView(); } }View Code
GitHub:https://github.com/1024477951/FragmentApp
希望的可以收藏,^_^