最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android RecyclerView上拉加载和下拉刷新
时间:2017-03-24 编辑:简简单单 来源:一聚教程网
代码中注释的很详细,所以就直接上代码了。
核心实现
代码如下 | 复制代码 |
packagecom.example.fly.recyclerviewrefresh.base;
importandroid.os.Bundle; importandroid.support.annotation.Nullable; importandroid.support.v4.widget.SwipeRefreshLayout; importandroid.support.v7.widget.LinearLayoutManager; importandroid.support.v7.widget.RecyclerView; importcom.example.fly.recyclerviewrefresh.R; importjava.util.ArrayList; importjava.util.List;
/** * 类名: * 类描述:下拉刷新和上拉加载 * 创建人:fly * 创建日期: 2017/2/2. * 版本:V1.0 */ publicabstractclassRefreshActivity protectedSwipeRefreshLayout swipeRefreshLayout; protectedRecyclerView recyclerView; protectedLinearLayoutManager linearLayoutManager; protectedA adapter; protectedList protectedT dataBeanLoadMore = createBean(); protectedbooleanisLoadDataIng;// 默认为false 是否正在加载数据, false 不在加载, true 正在加载 protectedbooleanisScrollY;// 是否在Y轴(垂直方向)上滑动, false 没滑动, true 滑动
@Override protectedvoidonCreate(@NullableBundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(setLayout()); swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout); swipeRefreshLayout.setOnRefreshListener(this); swipeRefreshLayout.setColorSchemeResources(Refresh.colors);// 设置变化的颜色 recyclerView = (RecyclerView) findViewById(R.id.recyclerView); linearLayoutManager =newLinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager); loadMore(); }
/**作用就是能在父类中初始化公共的控件如上面的onCreate(@Nullable Bundle savedInstanceState)初始化的控件*/ protectedabstractintsetLayout();
publicabstractT createBean();
// public abstract A createAdapter();
/**上拉加载*/ protectedvoidloadMore() { recyclerView.addOnScrollListener(newRecyclerView.OnScrollListener() {
/** * * @param recyclerView 当前在滚动的RecyclerView * @param newState 当前滚动状态 * newState有三种值: //静止,没有滚动 public static final int SCROLL_STATE_IDLE = 0;
//正在被外部拖拽,一般为用户正在用手指滚动 public static final int SCROLL_STATE_DRAGGING = 1;
//自动滚动开始 public static final int SCROLL_STATE_SETTLING = 2; */ @Override publicvoidonScrollStateChanged(RecyclerView recyclerView,intnewState) { super.onScrollStateChanged(recyclerView, newState); if(newState == RecyclerView.SCROLL_STATE_IDLE && isLoadDataIng ==false) { intlastVisibleItem = linearLayoutManager.findLastCompletelyVisibleItemPosition();// 获取最后一个item的角标 inttotalItemCount = linearLayoutManager.getItemCount();// 获取item的总数 if(lastVisibleItem == (totalItemCount -1)) {// 判断滑到最后一个item if(!swipeRefreshLayout.isRefreshing()) {//不再下拉刷新状态 if(isScrollY) {// 在Y轴(垂直方向)上有滑动 // TODO 执行上拉加载 onShowRefresh(); loadMoreData(); } } } } }
/** * * @param recyclerView 当前滚动的view * @param dx 水平滚动距离 * @param dy 垂直滚动距离 */ @Override publicvoidonScrolled(RecyclerView recyclerView,intdx,intdy) { super.onScrolled(recyclerView, dx, dy); if(dy >0) { isScrollY =true; }else{ isScrollY =false; } } }); }
/**加载数据*/ publicabstractvoidloadMoreData();
/**显示加在更多的View*/ protectedvoidonShowRefresh() { isLoadDataIng =true;// 正在加载数据 lists.add(dataBeanLoadMore); adapter.notifyDataSetChanged(); }
/**隐藏加在更多的View*/ protectedvoidonHintLoadMore() { lists.remove(dataBeanLoadMore); isLoadDataIng =false;// 不在加载数据 adapter.notifyDataSetChanged(); } } |
代码如下 | 复制代码 |
packagecom.example.fly.recyclerviewrefresh;
importandroid.os.Handler; importandroid.os.Bundle; importcom.example.fly.recyclerviewrefresh.adapter.RecyclerAdapter; importcom.example.fly.recyclerviewrefresh.base.Refresh; importcom.example.fly.recyclerviewrefresh.base.RefreshActivity; importcom.example.fly.recyclerviewrefresh.bean.DataBean;
/** * 类名: * 类描述:RecyclerView刷新 方法二 * 创建人:fly * 创建日期: 2017/2/2. * 版本:V1.0 */ publicclassMainActivityextendsRefreshActivity
@Override protectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); for(inti =0; i <20; i++) { DataBean dataBean =newDataBean(Refresh.COMMON); dataBean.number = String.valueOf(i); lists.add(dataBean); } adapter =newRecyclerAdapter(lists,this); recyclerView.setAdapter(adapter); }
@Override publicvoidonRefresh() { newHandler().postDelayed(newRunnable() { @Override publicvoidrun() { lists.clear(); adapter.notifyDataSetChanged(); swipeRefreshLayout.setRefreshing(false); } },1000); }
@Override protectedintsetLayout() {returnR.layout.activity_main;}
@Override publicDataBean createBean() {returnnewDataBean(Refresh.LOAD_MORE);}
@Override publicvoidloadMoreData() { for(inti =0; i <5; i++) { DataBean dataBean =newDataBean(Refresh.COMMON); dataBean.number = String.valueOf(i) +"fly"; lists.add(dataBean); } adapter.notifyDataSetChanged(); onHintLoadMore(); } } |
相关文章
- sora软件价格介绍 02-22
- sora官网入口地址一览 02-22
- Sora生成的视频使用教程 02-22
- 《梦幻西游》元宵灯谜线索答案大全2024 02-22
- 《原神》有朋自远方来第一天通关攻略 02-22
- 《苏醒之路》四个结局达成攻略 02-22