中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Android端分頁加載庫的示例分析

發布時間:2021-03-29 09:23:17 來源:億速云 閱讀:159 作者:小新 欄目:開發技術

這篇文章主要介紹了Android端分頁加載庫的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

前言

RecyclerView幾乎在每個app里面都有被使用,但凡使用了列表就會采用分頁加載進行數據請求和加載。android 官方也推出了分頁庫,但是感覺只有kotlin一起使用才能體會到酸爽。Java 版本的也有很多很強大的第三方庫,

BaseRecyclerViewAdapterHelper這個庫是我用起來最順手的分頁庫,里面也包含了各式各樣強大的功能:分組、拖動排序、動畫,因為功能強大,代碼量也相對比較大。 但是很多時候我們想要的就是分頁加載,所以參照BaseRecyclerViewAdapterHelper寫下了這個分頁加載庫,只有分頁功能。(可以說照搬,也可以說精簡,但是其中也加入個人理解)。

這個庫相對BaseRecyclerViewAdapterHelper只有兩個優點:

  • 代碼量小

  • BaseRecyclerViewAdapterHelper 在數據不滿一屏時仍然顯示加載更多以及頁面初始化時都會顯示loadmoewView(雖然提供了api進行隱藏,但是看了很長時間注釋和文檔都沒了解該怎么使用),而這個庫在初次加載和不滿一屏數據時不會顯示loadmoreView

gradle引用

implementation 'com.maxcion:pageloadadapter:1.0.0'

項目地址:github.com/Likeyong/Pa…

Android端分頁加載庫的示例分析

Android端分頁加載庫的示例分析

Android端分頁加載庫的示例分析

單列分頁加載

//一定要在PageLoadRecyclerVewAdapter<String> 的泛型參數里面指定數據源item格式
public class SimpleAdapter extends PageLoadRecyclerVewAdapter<String> {
 public SimpleAdapter(List<String> dataList) {
  super(dataList);
 }

 //這里進行 數據綁定
 @Override
 protected void convert(BaseViewHolder holder, String item) {
  holder.setText(R.id.text, item);
 }

 //這里返回布局item id
 @Override
 protected int getItemLayoutId() {
  return R.layout.item_simple;
 }
}

第一步 adapter實現好了,現在需要打開adapter的分頁加載功能

public class SingleColumnActivity extends BaseActivity<String> implements IOnLoadMoreListener {


 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_single_column);
  RecyclerView rv = findViewById(R.id.rv);
  //實例化adapter
  mAdapter = new SimpleAdapter(null);
  //給adapter 設置loadmoreview
  mAdapter.setLoadMoreView(new CommonLoadMoreView());
  //設置滑動到底部時進行更多加載的回調
  mAdapter.setOnLoadMoreListener(this);
  rv.setAdapter(mAdapter);
  rv.setLayoutManager(new LinearLayoutManager(this));
  request();
 }



 @Override
 public void onLoadMoreRequested() {

  request();
 }

 //這個函數不用管
 @Override
 protected List<String> convertRequestData(List<String> originData) {
  return originData;
 }


}

第二步,RecyclerView也打開了分頁加載功能,第三部就是根據接口返回的數據判斷到底是 加載失敗了、加成成功了還是加載結束(沒有更多數據需要加載)

protected void request() {
  NetWorkRequest.request(mAdapter.getDataSize() / PAGE_SIZE + 1, mFailCount, new NetWorkRequest.Callback() {
   @Override
   public void onSuccess(List<String> result) {
    List<T> finalResult = convertRequestData(result);
    if(result.size() >= PAGE_SIZE){// 接口返回了滿滿一頁的數據,這里數據加載成功
     if (mAdapter.getDataSize() == 0){
      //當前列表里面沒有數據,代表是初次請求,所以這里使用setNewData()

      mAdapter.setNewData(finalResult);
     }else {
      //列表里面已經有數據了,這里使用addDataList(),將數據添加到列表后面
      mAdapter.addDataList(finalResult);
     }
     //這里調用adapter。loadMoreComplete(true) 函數通知列表刷新footview, 這里參數一定要傳true
     mAdapter.loadMoreComplete(true);
    }else {
     //如果接口返回的數據不足一頁,也就代表沒有足夠的數據了,那么也就沒有下一頁數據,所以這里
     //認定分頁加載結束
     //這里的參數也一定要傳true
     mAdapter.loadMoreEnd(true);
    }
   }

   @Override
   public void onFail() {
    mFailCount++;
    //請求失敗 通知recyclerview 刷新footview 狀態
    mAdapter.loadMoreFail(true);
   }
  });
 }

上面是我寫的模擬接口請求,不用在意其他代碼,只要關注onSuccess 和onFail 兩個回調里面的邏輯。

混合布局的支持

在電商行業經常能看到商品列表中,同一個列表,有的商品占滿整整一行,有的一行顯示2-3個商品。這種實現方案就是通過GridLayoutManager 的SpanSizeLookup 來控制每個item占幾列的。

 RecyclerView rv = findViewById(R.id.rv);
    mAdapter = new SimpleAdapter(null);
    mAdapter.setLoadMoreView(new CommonLoadMoreView());
    mAdapter.setOnLoadMoreListener(this);
   //這里我們將列表設置最多兩列
    GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
    layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
      @Override
      public int getSpanSize(int position) {
       //根據position 設置每個item應該占幾列
       //如果當前的position是3的整數倍 我們就讓他占滿2列,其他的只占1列
        return position % 3 == 0 ? 2 : 1 ;
      }
    });
    rv.setLayoutManager(layoutManager);
    rv.setAdapter(mAdapter);

RecyclerView多Type支持

如果要使用多type, 在寫Adapter的時候要繼承PageLoadMultiRecyclerViewAdapter<T, BaseViewHolder>,其中T 是數據源item類型,這個類型必須實現  IMultiItem 接口,并在getItemType()函數中返回當前item對應的type

public class MultiPageLoadAdapter extends PageLoadMultiRecyclerViewAdapter<MultiData, BaseViewHolder> {
  public MultiPageLoadAdapter(List<MultiData> dataList) {
    super(dataList);
    //構造函數里面將 每種type 和 type 對應的布局進行綁定
    addItemLayout(MultiData.TYPE_TEXT, R.layout.item_simple);
    addItemLayout(MultiData.TYPE_IMAGE, R.layout.item_multi_image);
    addItemLayout(MultiData.TYPE_VIDEO, R.layout.item_multi_video);
  }

  @Override
  protected void convert(BaseViewHolder holder, MultiData item) {
    //在convert中針對不同的type 進行不同的bind邏輯
    switch (holder.getItemViewType()){
      case MultiData.TYPE_VIDEO:
        holder.setText(R.id.text, item.content);
        break;

      case MultiData.TYPE_IMAGE:
        holder.setText(R.id.text, item.content);
        break;

      case MultiData.TYPE_TEXT:
        holder.setText(R.id.text, item.content);
      default:
        break;
    }
  }
}

引入方式也和上面兩種方式一樣

 RecyclerView recyclerView = findViewById(R.id.rv);
    mAdapter = new MultiPageLoadAdapter(null);
    mAdapter.setLoadMoreView(new CommonLoadMoreView());
    mAdapter.setOnLoadMoreListener(this);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(mAdapter);

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Android端分頁加載庫的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

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

AI

焦作市| 改则县| 广昌县| 高淳县| 大竹县| 汕头市| 丰城市| 肥东县| 迭部县| 浏阳市| 武邑县| 宝鸡市| 黄山市| 剑河县| 仙桃市| 贵州省| 突泉县| 仙居县| 岳池县| 田阳县| 乐业县| 宁乡县| 扬州市| 惠安县| 大石桥市| 潍坊市| 麻城市| 彭州市| 应城市| 云和县| 尼勒克县| 晋宁县| 汨罗市| 香河县| 永寿县| 磐安县| 浪卡子县| 信丰县| 平安县| 旌德县| 恩施市|