欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android界面數(shù)據(jù)懶加載實(shí)現(xiàn)代碼

 更新時(shí)間:2020年05月21日 10:47:06   作者:< />  
這篇文章主要為大家分享了Android界面數(shù)據(jù)懶加載實(shí)現(xiàn)代碼,告訴大家怎樣實(shí)現(xiàn)界面即Fragment的懶加載,感興趣的小伙伴們可以參考一下

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

第一步:自定義一個(gè)fragment讓他繼承Fragment

1、重寫setUserVisibleHint方法
2、定義一個(gè)抽象方法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();
}

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

/**
 * A simple {@link Fragment} subclass.
 */
public class NetNewsFragment extends BaseFragment {
  //定義一個(gè)全局變量用來保存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)準(zhǔn)備完畢
          isPrepared = true;
    (new android.os.Handler()).postDelayed(new Runnable() {
            @Override
            public void run() {
   lazyInitData();
    }
      },200);
      }
        return v;
 }

  /**
 * 初始化Fragment數(shù)據(jù)的方法,實(shí)現(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())中的方法是用多線程的方式實(shí)現(xiàn)了異步加載繼而達(dá)到初始化布局時(shí)有時(shí)間生成界面組件然后再加載數(shù)據(jù)。

至此,安卓中實(shí)現(xiàn)界面(Fragment)數(shù)據(jù)懶加載的目的就達(dá)到了。大家以后若是想要實(shí)現(xiàn)多張界面切換并且數(shù)據(jù)需要網(wǎng)絡(luò)請求的話,建議多使用懶加載。

好了,關(guān)于懶加載的介紹就說到這里。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論