1. 程式人生 > >Android--Fragment 實現懶載入和不重複載入

Android--Fragment 實現懶載入和不重複載入

基類:

package fragment;

import android.support.v4.app.Fragment;
import android.view.View;


/**
 * Created by xiaobai on 2018/1/31/031.
 */

public abstract class BaseFragment extends Fragment {
    /**
     * Fragment當前狀態是否可見
     */
    public boolean isVisible;

    /**
     * inflate佈局檔案 返回的view
     */
    public View mView;

    /**
     * 簡化 findViewById
     *
     * @param viewId
     * @param <T>
     * @return
     */
    protected <T extends View> T find(int viewId) {
        return (T) mView.findViewById(viewId);
    }

    /**
     * setUserVisibleHint是在onCreateView之前呼叫的
     * 設定Fragment可見狀態
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        /**
         * 判斷是否可見
         */
        if (getUserVisibleHint()) {
            isVisible = true;
            onVisible();
        } else {
            isVisible = false;
            onInvisible();
        }
    }

    /**
     * 可見
     */
    private void onVisible() {
        lazyLoad();
    }

    /**
     * 不可見
     */
    private void onInvisible() {
    }

    /**
     * 延遲載入
     * 子類必須重寫此方法
     */
    public abstract void lazyLoad();
}
應用:
package fragment;

import android.content.pm.ApplicationInfo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import com.android.xiaobai.R;

import java.util.List;

/**
 * Created by xiaobai on 2018/1/31/031.
 */

public class AppFragment extends BaseFragment {
    /**
     * 標誌位,標誌已經初始化完成
     */
    private boolean isPrepared;
    /**
     * 是否已被載入過一次,第二次就不再去請求資料了
     */
    private boolean mHasLoadedOnce;
    private List<ApplicationInfo> mAppList;
    private ListView lv;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (mView == null) {
            // 需要inflate一個佈局檔案 填充Fragment
            mView = inflater.inflate(R.layout.fragment_app, container, false);
            initView();
            isPrepared = true;
//        實現懶載入
            lazyLoad();
        }
        //快取的mView需要判斷是否已經被加過parent, 如果有parent需要從parent刪除,要不然會發生這個mView已經有parent的錯誤。
        ViewGroup parent = (ViewGroup) mView.getParent();
        if (parent != null) {
            parent.removeView(mView);
        }

        return mView;
    }
    /**
     * 初始化控制元件
     */
    private void initView() {
        lv = find(R.id.lv);
    }

    @Override
    public void lazyLoad() {
        if (!isPrepared || !isVisible || mHasLoadedOnce) {
            return;
        }
        //填充各控制元件的資料
        
        mHasLoadedOnce = true;
    }
}



相關推薦

Android--Fragment 實現載入重複載入

基類: package fragment; import android.support.v4.app.Fragment; import android.view.View; /** * Cr

Android Fragment實現載入

在最近的專案中一個介面中有四個Fragment。每個碎片中都要進行網路請求。 週期也開始並進行了載入。後來在網上進行了搜尋找到了一個非常簡單的官方自帶的方法setUserVisibleHint(boolean isVisibleToUser)。我們可以通過這

Android手機平板兩誤,使用Fragment實現相容手機平板的程式

記得我之前參與開發過一個華為的專案,要求程式可以支援好幾種終端裝置,其中就包括Android手機和Android Pad。然後為了節省人力,公司無節操地讓Android手機和Android Pad都由我們團隊開發。當時專案組定的方案是,製作兩個版本的App

android Fragment實現APP主介面Tab頁面切換點選事件

Fragment 頁面切換不能滑動 所以對於listview 可以新增的左右滑動事件 ,不會有衝突例如(QQ的好友列表的刪除) Fragment 和viewpager 的區別 Viewpager 的事件都需要寫在 MainActivity 使

Fragment實現載入,讓應用更優化

一.概述 玩過微信的都知道,微信用的是懶載入的模式,之所以使用懶載入是因為:當使用viewpager+adapter作為應用大的佈局時,viewpager會通過setOffscreenPageLimit來設定預載入的專案,不設定setOffscreenPage

Android開發-ViewPager巢狀Fragment卡頓解決Viewpager滑動重複載入Fragment延遲載入

Fragment大家肯定不會陌生的,幾乎每個App裡都有它的存在,作為Google在3.0以後引入的一個概念,極大的解決了Activity(或者說手機螢幕)的侷限性,讓Activity碎片化,正如它的原意 【分段】,【碎片】一樣讓一個螢幕中的activity展示

Android實現短音訊震動的一些總結

好長時間沒有寫部落格了,因為最近事情比較多。所以好長時間沒有寫部落格了。堅持是一件很辛苦的事情。但還需要努力。。。好了,閒話不扯了。因為最近專案中用到了相應的短音訊和震動的功能,所以這裡總結一下相應的內容! 本文知識點: 音訊中的一些知識和常用的API介紹;

JMeter實現唯一引數生成重複時間戳

現象: 使用jmeter做介面壓測時,總會遇到壓測時,提示不允許重複id或提示訂單不允許重複現象,那麼如何解決呢? 原料工具 jmeter4.0 本地準備好介面服務 思路: 單個介面,小批量介面,一般以時間戳或者是日期格式的資料作為介面測試引數,解決引數化問題; 大批量介面壓

為什麼Android Fragment 頁面中onActivityResult方法走?

Android 開發中,有很多頁面是都會有左右滑動功能了,於是有了ViewPager,ViewPager裡面放各自的Fragment,點選某一個Fragment中的按鈕 跳轉到一個Activity頁面 關閉這個頁面是如果需要傳值或者通知前一個Fragment,需要呼叫setResult方法,

Android簡單實現本地圖片視訊選擇器功能

哈嘍,大家好,好久不見了,很久沒有更新 Android 方面的技術文章了,最近在忙公司的 AR 類的新產品,其中涉及到本地圖片和視訊的選擇和上傳功能。至於為什麼不用系統提供的圖片和視訊選擇器,原因你懂的,系統提供的選擇器只能通過 Intent 方式去獲取,這意味

由指定物件集合分出重複物件集合重複物件集合

package com.example.demo0810.util; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.uti

android smartRefresh下拉重新整理上拉載入

1.遠端依賴  compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1' 2.佈局中使用 <com.scwang.smartrefresh.layout.SmartRefreshLayout androi

Android 完美實現圖片圓角圓形 對實現進行分析

                轉載請標明出處:http://blog.csdn.net/lmj623565791/article/details/24555655本來想在網上找個圓角的例子看一看,不盡人意啊,基本都是官方的Demo的那張原理圖,稍後會貼出。於是自己自定義了個View,實現圖片的圓角以及圓形效

邀請碼實現(六位重複

實現思路:資料庫 + UUID 小貼士: UUID是1.5中新增的一個類,在java.util下,用它可以產生一個號稱全球唯一的ID UUID由以下幾部分的組合: (1)當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一

Set 集合怎麼實現add()方法新增重複

                //新增一個set集合                Set set=new HashSet();Animal animal1=new Animal("dongwu",2);Animal animal2=new Animal("dongwu",

Android ListView 實現下拉重新整理上拉載入

1.簡介        無疑,在Android開發中,ListView是使用非常頻繁的控制元件之一,ListView提供一個列表的容易,允許我們以列表的形式將資料展示到介面上,但是Google給我們提供的原生ListView的控制元件,雖然在功能上很強大,但是在使用

用css3實現頁面背景圖片重複

也許許多人在做網頁的時候都會遇到過一個這樣的問題,什麼問題呢那就是跟下面這張圖片一樣的問題 出現這樣的問題的原因是因為div的大小大於背景圖片的大小,從而導致了背景圖片的重複,其實在css3中解決像這樣的問題特別簡單隻需要新增一個這樣的樣式即可    background

Android app實現自更新安裝,許可權檢測適配Android6.0以下Android6.0Android7.0Android8.0總結篇

首先下載問檔案需要在AndroidManifest.xml裡新增SD卡讀寫許可權,下面兩個許可權:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <us

BottomNavigationView + ViewPager + Fragment 實現左右滑動下方導航欄

轉載請註明出處:http://blog.csdn.net/htwhtw123/article/details/78441431 比較簡單的用BottomNavigationView 、 ViewPager 、 Fragment 實現下方導航欄與上方可翻頁頁面,

Android Fragment的FragmentTransaction 操作對應的生命週期變化

1. Fragment的生命週期和Activity的生命週期 Fragment是依附於Activity而存在的,當Activity在onCreate時,Fragment會進行onAttach, onCreate, onCreateView, onActivityCreat