Android RecycleView上拉加载
来源:互联网 发布:vj软件resolume 编辑:程序博客网 时间:2024/05/18 00:26
上拉加载的思路就是实现OnScrollListener
<pre name="code" class="java"> mRecyclerView.addOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == list.size()) {//这里进行加载数据操作 } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition(); } });
1、当RecycleView当前可见项的最后一个+1=列表的长度时候。比如列表长度为10,当前可见(从0开始计算)的最后一个是9,就是最后一个了。
2、newState是一个什么东西?
public void stopScroll() { setScrollState(SCROLL_STATE_IDLE); stopScrollersInternal(); }
<span style="font-size:18px;">这是来自RecyclerView的代码片段,从上面可以看出。当RecyclerView停止刷新(上拉或者下拉)的时候设置RecyclerView的状态为SCROLL_STATE_IDLE。当用户停止刷新并且当前可见的item是最后一个就显示上拉加载</span>
<span style="font-size:18px;"></span>
<span style="font-size:18px;"></span>
<span style="font-size:18px;">activity代码</span>
<span style="font-size:18px;"></span><pre name="code" class="java">package com.qd.wangxm.recycleviewloadmore;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.RecyclerView.OnScrollListener;import android.util.Log;import android.widget.Toast;import com.qd.wangxm.recycleviewloadmore.adapter.MyAdapter;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private MyAdapter mAdapter; private LinearLayoutManager linearLayoutManager; private int lastVisibleItem; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); linearLayoutManager = new LinearLayoutManager(this); final List<String> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add("第" + i + "个数据项"); } mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); mAdapter = new MyAdapter(list, this); RecyclerView.LayoutManager manager = new GridLayoutManager(this, 1, GridLayoutManager.VERTICAL, false); mRecyclerView.setLayoutManager(linearLayoutManager); mRecyclerView.setAdapter(mAdapter); mRecyclerView.addOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem == list.size() && mAdapter.getFooterType() == MyAdapter.FOOTER_LOAD_MORE) { mAdapter.loading(); //在这里加载数据 new Handler().postDelayed(new Runnable() { @Override public void run() { List<String> newDatas = new ArrayList<String>(); for (int i = 0; i < 5; i++) { int index = i + 1; newDatas.add("more item" + index); } list.addAll(newDatas); //加载完数据调用addItem mAdapter.addItem(list); } }, 1000); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition(); } }); } public void showToast(String msg) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); Log.e("-------------", msg); }}
</pre>adapter代码<pre>
<span style="font-size:18px;"></span><pre name="code" class="java">package com.qd.wangxm.recycleviewloadmore.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.qd.wangxm.recycleviewloadmore.R;import java.util.ArrayList;import java.util.List;/** * Created by WangXM on 2016/5/30. */public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static final int TYPE_ITEM = 0; //普通Item View private static final int TYPE_FOOTER = 1; //顶部FootView public static final int FOOTer_LOADING=1; public static final int FOOTER_LOAD_MORE=2; public static final int FOOTER_NO_ITEM=0; private int footerType=FOOTER_LOAD_MORE; private List<String> mList = new ArrayList<>(); private Context mContext; public MyAdapter(List<String> list, Context context) { mList = list; mContext = context; } public int getFooterType(){ return footerType; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_ITEM) { View view = LayoutInflater.from(mContext).inflate(R.layout.item_myadapter, parent, false); ItemHolder holder = new ItemHolder(view); return holder; } else { View view = LayoutInflater.from(mContext).inflate(R.layout.item_foot, parent, false); FootHolder holder = new FootHolder(view); return holder; } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (position < mList.size()) { ((ItemHolder) holder).tvContent.setText(mList.get(position)); } else { if (footerType==FOOTER_LOAD_MORE) ((FootHolder) holder).tvContent.setText("上拉加载更多数据"); else if (footerType==FOOTER_NO_ITEM) ((FootHolder) holder).tvContent.setText("已经是最后一页,没有数据了"); else ((FootHolder) holder).tvContent.setText("正在加载更多数据。。。"); } } @Override public int getItemCount() { return mList.size() + 1; } @Override public int getItemViewType(int position) { if (position < mList.size()) { return TYPE_ITEM; } else { return TYPE_FOOTER; } } public void loading(){ this.footerType=FOOTer_LOADING; notifyDataSetChanged(); } public void addItem(List<String> list){// this.mList.clear();// mList.addAll(list); this.footerType=FOOTER_LOAD_MORE; notifyDataSetChanged(); } public void addItemNoNext(List<String> list){ this.mList.clear(); mList.addAll(list); this.footerType=FOOTER_NO_ITEM; notifyDataSetChanged(); } class ItemHolder extends RecyclerView.ViewHolder { public TextView tvContent; public ItemHolder(View itemView) { super(itemView); tvContent = (TextView) itemView.findViewById(R.id.tv_context); } } class FootHolder extends RecyclerView.ViewHolder { public TextView tvContent; public FootHolder(View itemView) { super(itemView); tvContent = (TextView) itemView.findViewById(R.id.tv_context); } }}
BaseAdapter见下文 http://blog.csdn.net/jing85432373/article/details/51682156
</pre><pre code_snippet_id="1702488" snippet_file_name="blog_20160531_4_7186047" name="code" class="java">
</pre><pre>
1 1
- Android RecycleView上拉加载
- Android RecycleView上拉加载BaseAdapter(二)
- RecycleView上拉加载和下拉刷新
- recycleview上拉自动加载数据
- RecycleView下拉刷新上拉加载
- recycleView下拉刷新上拉加载
- RecycleView上拉刷新下拉加载
- RecycleView原生添加上拉加载
- android控件使用---recycleview自定义上拉加载,和加载多个布局及加入动画
- android material design之Viewpager嵌套Viewpager,recycleview下拉刷新上拉加载
- RecycleView 上拉加载下拉刷新 分页加载
- android 上拉加载
- RecycleView上拉加载更多的一种解决方案
- 自定义下拉刷新和上拉加载的recycleview
- 一步一步封装自己的Recycleview,上拉加载
- 使用SwipeRefreshLayout实现recycleview下拉刷新上拉加载
- RecycleView上拉加载和下拉刷新二
- 【实训】自定义上拉加载下拉刷新的RecycleView
- 互联网金融时代的基础设施——征信
- c++对map进行排序
- 经典算法-兵兵球比赛
- Paste模块的世界
- Ant详解
- Android RecycleView上拉加载
- 如何解决哈希冲突
- python3 threading thread 模块学习
- [IOS]对视频、音频播放器添加缓冲进度条
- C#语法——const vs readonly
- Image图片的相关工具类
- leetcode 27. Remove Element
- SIFT特征(三)
- Android HeaderAndFooterRecyclerView、ExRecyclerView、PullRefreshLoadRecyclerView、PowerfulRecyclerView