国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android界面數據懶加載實現代碼

2019-12-12 05:21:04
字體:
來源:轉載
供稿:網友

大家在使用手機新聞客戶端的時候就會有一個發現,大多數的新聞客戶端都會把新聞分類,諸如頭條、娛樂、體育、科技等等,如何實現這種界面的呢?這個實現起來其實很簡單,就是在一個Fragment中實現多個ViewPage的切換,再在ViewPage的上面放一個TabLayout,關聯起來就可以實現聯動效果。如果大家感覺不太明了的話,以后我可以專門寫一篇關于Fragment中放入多個ViewPage的博客,今天,我主要介紹的是怎樣實現界面即Fragment的懶加載。那么,大家就會奇怪了既然是加載界面直接加載就好了,為何還要使用懶加載呢?這就需要說一下懶加載的好處了。前文已經介紹過了,大多數新聞客戶端實現各種新聞切換的原理是一個Fragment中存放多個ViewPage,如果進入程序之后將所有的ViewPage中的數據都加載上的話,那么無疑會增加APP運行時的負擔,而懶加載則可以實現程序啟動時fragment中的viewpage只預加載一個界面,等到滑到下一界面時再加載下一個viewpage的數據,并且實現加載界面緩存,下一次再切換到此界面時就不再重新加載了。好了,解釋清楚為何要用懶加載,下面就進入今天的正題吧。

第一步:自定義一個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;@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);if (isVisibleToUser){//加載數據isVisible = true;   lazyInitData();  }else {isVisible = false;  } }public abstract void lazyInitData();}

第二步:再定義一個fragment繼承剛才定義的fragment
1、先定義一個全局變量來保存fragment的狀態(這一步是為緩存界面準備)定義兩個boolean型的變量分別表明fragment的視圖控件已經準備好以及當前fragment是否已經加載過數據
2、判斷fragment的狀態是不是為空,為空時再生成新界面
3、重寫父類的lazyInitData()方法實現懶加載

/** * A simple {@link Fragment} subclass. */public class NetNewsFragment extends BaseFragment {  //定義一個全局變量用來保存Fragment的狀態  private View v;  //listview展示的數據  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) {          //將布局關聯起來          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);          //界面已經準備完畢          isPrepared = true;     (new android.os.Handler()).postDelayed(new Runnable() {            @Override            public void run() {     lazyInitData();      }       },200);       }        return v;  }  /**  * 初始化Fragment數據的方法,實現懶加載   */  @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的樣式監聽我都省略了,而這里(new android.os.Handler()).postDelayed(new Runnable())中的方法是用多線程的方式實現了異步加載繼而達到初始化布局時有時間生成界面組件然后再加載數據。

至此,安卓中實現界面(Fragment)數據懶加載的目的就達到了。大家以后若是想要實現多張界面切換并且數據需要網絡請求的話,建議多使用懶加載。

好了,關于懶加載的介紹就說到這里。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大宁县| 花莲市| 泸水县| 乌拉特前旗| 漳平市| 丹寨县| 朝阳市| 曲阜市| 三穗县| 丁青县| 修武县| 大洼县| 营山县| 陈巴尔虎旗| 芷江| 中江县| 芜湖市| 历史| 肥西县| 遵义县| 平湖市| 张家界市| 方山县| 长葛市| 瑞金市| 柳州市| 南华县| 赞皇县| 交城县| 泾源县| 且末县| 温宿县| 揭阳市| 罗源县| 左权县| 蕉岭县| 佛坪县| 呼和浩特市| 元阳县| 延长县| 岐山县|