91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Fragment的setUserVisibleHint方法實現懶加載

發布時間:2020-03-22 22:10:33 來源:網絡 閱讀:2049 作者:594074064 欄目:移動開發

    一個Activity以ViewPager(或其他容器)與多個Fragment來結合使用,如果每個Fragment都要去加載數據(本地或網絡),那么這個activity剛創建的時候就要初始化大量的資源。那能不能做到當切換到這個fragment的時候才去初始化呢?

    答案就在setUserVisibleHint里。該方法告訴系統這個Fragment的UI是否可見。所以我們通過該方法,在Fragment可見時再去初始化就行了。


public abstract class LazyFragment extends Fragment {

    protected boolean isVisible;

    /**

     *在這里實現Fragment數據的緩加載。

     */

    @override

    public void setUserVisibleHint(boolean isVisibleToUser) {

        super.setUserVisibleHint(isVisibleToUser);

        if (getUserVisibleHint()) {

            isVisible = true;

            onVisible();

        } else {

            isVisible = false;

            onInvisible();

        }

    }


    protected void onVisible() {

        lazyLoad();

    }


    protected abstract void lazyLoad();

    protected void onInvisible(){}

}


問題:為什么不在getUserVisibleHint里面直接處理事情,而是寫一個抽象函數呢?

    這樣做是為了重用。因為fragment中,我們還需要創建視圖,可能還需要在該Fragment不可見時進行其他小量的初始化操作(如初始化需要通過AIDL調用的遠程服務)。而setUserVisibleHint()是在onCreateView之前調用的在視圖未初始化時,在lazyload當中使用就會報空指針。而把lazyLoad抽離成一個方法,那么它的子類就可以這樣做:

    public class OpenResultFragment extends LazyFragment {

        //標志位,標志已經初始化完成(防止onCreateView未調用之前就調用該方法導致空指針)

        private Boolean isPrepared;

        @override

        public View onCreateView() {

            View view = inflater.inflate(R.layout.fragment, container, false);

            //初始化控件

            isPrepared = true;

            lazyLoad();

            return view;

        }


        @override

        protected void lazyLoad() {

            //在調用了onCreateView后并且fragment的UI是可見的就填充數據

            //如果是要下載網絡數據,不是給view填充數據之類的,就不需要isPrepared參數了

            if (!isPrepared || !isVisible) return;

            //填充各控件的數據

        }

    }

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蒙山县| 额尔古纳市| 闽侯县| 行唐县| 贡山| 邛崃市| 武平县| 奉节县| 阳泉市| 双柏县| 昌宁县| 阿合奇县| 青冈县| 莱芜市| 东方市| 宣化县| 离岛区| 皋兰县| 基隆市| 东安县| 五大连池市| 大港区| 永善县| 扶沟县| 昌黎县| 夹江县| 固始县| 沽源县| 松溪县| 拜城县| 壶关县| 湛江市| 延川县| 海宁市| 祁阳县| 景谷| 邯郸县| 河东区| 根河市| 秦皇岛市| 铁力市|