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

首頁 > 系統 > Android > 正文

Android Recyclerview實現上拉加載更多功能

2019-10-23 18:28:01
字體:
來源:轉載
供稿:網友

在項目中使用列表的下拉刷新和上拉加載更多是很常見的功能,下拉刷新我們可以用Android自帶的SwipeRefreshLayout這個很好解決。但是上拉加載更多就要去找一些框架了,剛開始的時候我找到一個Mugen的github開源框架,但是有個問題,當頁面能夠一次加載全部item的時候,上拉加載的功能就失效了。

這是因為當界面一次能夠加載完全部item的時候,繼續往上拉,Recyclerview的滑動監聽,中的onScrolled方法只會在頁面加載的時候調用一次,只后就不會被調用了,并且dy=0

 @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) {    super.onScrolled(recyclerView, dx, dy);   }

代碼如下:

package com.appnews.utils;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.Toast;/** * Created by Administrator on 2017/5/17. */public class LoadMoreForRecyclerView { //最后一個顯示的item的position private int lastVisibleItemPosition; //觸摸記錄之前的觸摸位置 private float oldY; //滑動狀態 private int state; //滑動時Y軸偏移(大于0表示向上滑動) private int offsetY = 0; //touch事件中移動的距離(當前觸摸的位置-oldY) private float moveY; /**  * 構造方法  * @param recyclerView  * @param loadMoreListener  */ public LoadMoreForRecyclerView(RecyclerView recyclerView, LoadMoreListener loadMoreListener) {  width(recyclerView, loadMoreListener); } /**  *  * @param recyclerView recyclerview  * @param loadMoreListener 回調監聽  */ public void width(final RecyclerView recyclerView, LoadMoreListener loadMoreListener) {  mLoadMoreListener = loadMoreListener;  //線性布局管理  final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();  //recyclerview設置滑動監聽  recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {   @Override   public void onScrollStateChanged(RecyclerView recyclerView, int newState) {    super.onScrollStateChanged(recyclerView, newState);    //滑動狀態    state = newState;    //獲得最后一個顯示的item位置    lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();   }   @Override   public void onScrolled(RecyclerView recyclerView, int dx, int dy) {    super.onScrolled(recyclerView, dx, dy);    //記錄Y軸偏移量    offsetY = dy;   }  });  //設置touch監聽  recyclerView.setOnTouchListener(new View.OnTouchListener() {   @Override   public boolean onTouch(View view, MotionEvent motionEvent) {    switch (motionEvent.getAction()) {     case MotionEvent.ACTION_MOVE:      //計算出移動的距離(小于0表示向上拖動)      moveY = motionEvent.getY() - oldY;      //記錄當前觸摸的位置      oldY = motionEvent.getY();      break;     case MotionEvent.ACTION_UP:      //如果是拖動或者飛快滑動并且顯示的是適配器中最后一條數據      if ((state == 1 || state == 2) && lastVisibleItemPosition == recyclerView.getAdapter().getItemCount() - 1) {       if (offsetY > 0) {//如果偏移量大于0        if (mLoadMoreListener != null) {         //回調加載更多監聽         mLoadMoreListener.loadListener();        }       } else if (offsetY == 0) {//如果偏移量一直等于0        if ((moveY) < 0) {//手指移動的距離小于0(向上拖動recyclerView)         if (mLoadMoreListener != null) {          //回調加載更多          mLoadMoreListener.loadListener();         }        }       }      }      break;    }    //返回值要為false,不會攔截滑動事件    return false;   }  }); } private LoadMoreListener mLoadMoreListener; /**  * 回調接口  */ public interface LoadMoreListener {  void loadListener(); }}

使用的時候:

//上拉加載更多滑動監聽  new LoadMoreForRecyclerView(rc, new LoadMoreForRecyclerView.LoadMoreListener() {   @Override   public void loadListener() {    showToast("開始加載");    getData(2);   }  });

rc就是recyclerview,在重寫的方法中,進行數據處理。

效果圖:

android,recyclerview上拉加載更多,recyclerview上拉加載

如果去研究SwipeRefreshLayout的源碼,應該可以實現差不多的效果。

以上所述是小編給大家介紹的Android Recyclerview上拉加載更多功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 离岛区| 新密市| 嘉善县| 肇州县| 桐庐县| 金秀| 荆门市| 新营市| 广州市| 治多县| 会东县| 云南省| 定安县| 永德县| 壤塘县| 钦州市| 德清县| 工布江达县| 怀化市| 平阳县| 九龙县| 太保市| 兴安盟| 遵义市| 芮城县| 汉川市| 吉水县| 雅江县| 平舆县| 武穴市| 上饶县| 宁德市| 英吉沙县| 乌海市| 集安市| 镇远县| 汉中市| 铜川市| 防城港市| 永仁县| 平塘县|