Android界面數(shù)據(jù)懶加載實現(xiàn)代碼
大家在使用手機新聞客戶端的時候就會有一個發(fā)現(xiàn),大多數(shù)的新聞客戶端都會把新聞分類,諸如頭條、娛樂、體育、科技等等,如何實現(xiàn)這種界面的呢?這個實現(xiàn)起來其實很簡單,就是在一個Fragment中實現(xiàn)多個ViewPage的切換,再在ViewPage的上面放一個TabLayout,關(guān)聯(lián)起來就可以實現(xiàn)聯(lián)動效果。如果大家感覺不太明了的話,以后我可以專門寫一篇關(guān)于Fragment中放入多個ViewPage的博客,今天,我主要介紹的是怎樣實現(xiàn)界面即Fragment的懶加載。那么,大家就會奇怪了既然是加載界面直接加載就好了,為何還要使用懶加載呢?這就需要說一下懶加載的好處了。前文已經(jīng)介紹過了,大多數(shù)新聞客戶端實現(xiàn)各種新聞切換的原理是一個Fragment中存放多個ViewPage,如果進入程序之后將所有的ViewPage中的數(shù)據(jù)都加載上的話,那么無疑會增加APP運行時的負擔(dān),而懶加載則可以實現(xiàn)程序啟動時fragment中的viewpage只預(yù)加載一個界面,等到滑到下一界面時再加載下一個viewpage的數(shù)據(jù),并且實現(xiàn)加載界面緩存,下一次再切換到此界面時就不再重新加載了。好了,解釋清楚為何要用懶加載,下面就進入今天的正題吧。
第一步:自定義一個fragment讓他繼承Fragment
1、重寫setUserVisibleHint方法
2、定義一個抽象方法lazyInitData()
package com.jereh.jinritoutiao.fragmentdemo.fragment;
import android.support.v4.app.Fragment;
/**
* Created by zhangdi on 2016/8/8.
*/
public abstract class BaseFragment extends Fragment {
protected boolean isVisible = false;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser){
//加載數(shù)據(jù)
isVisible = true;
lazyInitData();
}else {
isVisible = false;
}
}
public abstract void lazyInitData();
}
第二步:再定義一個fragment繼承剛才定義的fragment
1、先定義一個全局變量來保存fragment的狀態(tài)(這一步是為緩存界面準備)定義兩個boolean型的變量分別表明fragment的視圖控件已經(jīng)準備好以及當前fragment是否已經(jīng)加載過數(shù)據(jù)
2、判斷fragment的狀態(tài)是不是為空,為空時再生成新界面
3、重寫父類的lazyInitData()方法實現(xiàn)懶加載
/**
* A simple {@link Fragment} subclass.
*/
public class NetNewsFragment extends BaseFragment {
//定義一個全局變量用來保存Fragment的狀態(tài)
private View v;
//listview展示的數(shù)據(jù)
private List<NetNews> mData;
private PullToRefreshListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String u= getArguments().getString("api");
if(!TextUtils.isEmpty(u)){
url = u;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if(v==null) {
//將布局關(guān)聯(lián)起來
v = inflater.inflate(R.layout.fragment_net_news, container, false);
//找到ViewPage
lv = (PullToRefreshListView) v.findViewById(R.id.lv01);
mData = new ArrayList<>();
//初始化適配器
adapter = new NetNewsAdapter(mData, getActivity());
lv.setAdapter(adapter);
//界面已經(jīng)準備完畢
isPrepared = true;
(new android.os.Handler()).postDelayed(new Runnable() {
@Override
public void run() {
lazyInitData();
}
},200);
}
return v;
}
/**
* 初始化Fragment數(shù)據(jù)的方法,實現(xiàn)懶加載
*/
@Override
public void lazyInitData() {
if (isPrepared&&isVisible&&isFirst){
lv.setRefreshing();
VolleyUtil.get(url+"?num=20&page="+page)
.setCallBack(new NetCallBack())
.build()
.addRequestHeader("apikey", Constants.API_KEY)
.start();
isFirst = false;
}
}
這里我為了將懶加載的代碼凸顯出來,所以PullToListView的樣式監(jiān)聽我都省略了,而這里(new android.os.Handler()).postDelayed(new Runnable())中的方法是用多線程的方式實現(xiàn)了異步加載繼而達到初始化布局時有時間生成界面組件然后再加載數(shù)據(jù)。
至此,安卓中實現(xiàn)界面(Fragment)數(shù)據(jù)懶加載的目的就達到了。大家以后若是想要實現(xiàn)多張界面切換并且數(shù)據(jù)需要網(wǎng)絡(luò)請求的話,建議多使用懶加載。
好了,關(guān)于懶加載的介紹就說到這里。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android 開發(fā)使用PopupWindow實現(xiàn)彈出警告框的復(fù)用類示例
- android PopupWindow 和 Activity彈出窗口實現(xiàn)方式
- android popwindow實現(xiàn)左側(cè)彈出菜單層及PopupWindow主要方法介紹
- Android Animation實戰(zhàn)之屏幕底部彈出PopupWindow
- Android編程實現(xiàn)popupwindow彈出后屏幕背景變成半透明效果
- Android實現(xiàn)底部彈出PopupWindow背景逐漸變暗效果
- Android之用PopupWindow實現(xiàn)彈出菜單的方法詳解
- Android中自定義PopupWindow實現(xiàn)彈出框并帶有動畫效果
- Android中的popupwindow進入和退出的動畫效果
- Android簡單實現(xiàn)自定義彈框(PopupWindow)
- Android 開發(fā)使用PopupWindow實現(xiàn)加載等待界面功能示例
相關(guān)文章
為Retrofit統(tǒng)一添加post請求的默認參數(shù)的方法
這篇文章主要介紹了為Retrofit統(tǒng)一添加post請求的默認參數(shù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
解析android 流量監(jiān)測的實現(xiàn)原理
本篇文章是對android中流量監(jiān)測的實現(xiàn)原理進行了詳細的分析介紹,需要的朋友參考下2013-06-06
Flutter源碼分析之自定義控件(RenderBox)指南
寫了兩天的flutter,發(fā)現(xiàn)控件樣式很多,flutter資源很少,本文在于實用性,可以減少頁面代碼,下面這篇文章主要介紹了Flutter源碼分析之自定義控件(RenderBox)的相關(guān)資料,需要的朋友可以參考下2021-08-08
Android對話框AlertDialog與DatePickerDialog及TimePickerDialog使用詳解
這篇文章主要介紹了Android對話框中的提醒對話框AlertDialog、日期對話框DatePickerDialog、時間對話框TimePickerDialog使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-09-09
Android編程實現(xiàn)ActionBar的home圖標動畫切換效果
這篇文章主要介紹了Android編程實現(xiàn)ActionBar的home圖標動畫切換效果,涉及Android布局、樣式、Activity及菜單相關(guān)操作技巧,需要的朋友可以參考下2017-01-01
Android studio gradle環(huán)境變量配置教程
這篇文章主要為大家詳細介紹了Android studio gradle環(huán)境變量配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05

