recyclerview+swiperefreshlayout实现GridView下拉刷新,上拉加载更多
2016-08-04 17:10
691 查看
先看效果图:实现:public class TestAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {//正常条目private static final int TYPE_NORMAL_ITEM = 0;//加载更多private static final int TYPE_FOOTER_ITEM = 1;private View footerView;RecyclerView.LayoutManager mlayoutManager;private List<String> mDatas;Context context;public TestAdapter(RecyclerView.LayoutManager mlayoutManager, List<String> list, Context context) {this.mlayoutManager = mlayoutManager;mDatas = list;this.context = context;}public interface OnItemClickLitener {void onItemClick(View view, int position);void onItemLongClick(View view, int position);}private OnItemClickLitener mOnItemClickLitener;public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {this.mOnItemClickLitener = mOnItemClickLitener;}@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {if (viewType == TYPE_NORMAL_ITEM) {ItemViewHolder holder = new ItemViewHolder(LayoutInflater.from(context).inflate(R.layout.testitem, parent, false));return holder;} else {footerView = LayoutInflater.from(parent.getContext()).inflate(R.layout.footerview, null);GridLayoutManager.LayoutParams params = new GridLayoutManager.LayoutParams(GridLayoutManager.LayoutParams.MATCH_PARENT,GridLayoutManager.LayoutParams.WRAP_CONTENT);((GridLayoutManager) mlayoutManager).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {@Overridepublic int getSpanSize(int position) {int type = getItemViewType(position);if (type == TYPE_FOOTER_ITEM) {return 2;} else {return 1;}}});footerView.setLayoutParams(params);return new FooterViewHolder(footerView);}}public void setFooterNoMore(String txt) {TextView tv_footer = (TextView) footerView.findViewById(R.id.tv_footer);ContentLoadingProgressBar progress = (ContentLoadingProgressBar) footerView.findViewById(R.id.progress);progress.setVisibility(View.INVISIBLE);tv_footer.setText(txt);}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {if (holder instanceof ItemViewHolder) {((ItemViewHolder) holder).tv.setText(mDatas.get(position));if (mOnItemClickLitener != null) {((ItemViewHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {CommonUtils.toast(context, mDatas.get(position));}});}}}@Overridepublic int getItemCount() {return mDatas.size();}@Overridepublic int getItemViewType(int position) {if (position + 1 == getItemCount()) {return TYPE_FOOTER_ITEM;} else {return TYPE_NORMAL_ITEM;}}class ItemViewHolder extends RecyclerView.ViewHolder {TextView tv;public ItemViewHolder(View view) {super(view);tv = (TextView) view.findViewById(R.id.id_num);}}class FooterViewHolder extends RecyclerView.ViewHolder {TextView tv;public FooterViewHolder(View view) {super(view);tv = (TextView) view.findViewById(R.id.id_num);}}}
public class TestActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener, TestAdapter.OnItemClickLitener { SwipeRefreshLayout swipeRefreshLayout; RecyclerView recyclerView; private List<String> mDatas; MyHandler myHandler; int lastVisibleItem; TestAdapter adapter; RecyclerView.LayoutManager layoutManager; @Override public void onItemClick(View view, int position) { } @Override public void onItemLongClick(View view, int position) { } class MyHandler extends Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 0) { swipeRefreshLayout.setRefreshing(false); } else if (msg.what == 1) { adapter.setFooterNoMore("全部加载完"); } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); myHandler = new MyHandler(); initdata(); swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout); recyclerView = (RecyclerView) findViewById(R.id.recyclerView); swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.black), getResources().getColor(R.color.colorAccent), getResources().getColor(R.color.green)); swipeRefreshLayout.setOnRefreshListener(this); layoutManager = new GridLayoutManager(this, 2); adapter = new TestAdapter(layoutManager, mDatas, this); adapter.setOnItemClickLitener(this); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(adapter); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == adapter.getItemCount()) { // 此处在现实项目中,请换成网络请求数据代码,sendRequest ..... myHandler.sendEmptyMessageDelayed(1, 3000); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); lastVisibleItem = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition(); } }); } private void initdata() { mDatas = new ArrayList<String>(); for (int i = 1; i < 120; i++) { mDatas.add("zzz" + i); } } @Override public void onRefresh() { CommonUtils.toast(this, "刷新~~~"); myHandler.sendEmptyMessageDelayed(0, 5000); } }
相关文章推荐
- RecyclerView+SwipeRefreshLayout+ViewPager实现上拉加载更多下拉刷新和添加Banner(附源码)
- SwipeRefreshLayout + RecyclerView实现上拉加载和下拉刷新
- 简单实现WaveSwipeRefreshLayout+RecyclerView的上拉加载下拉刷新的功能
- SwipeRefreshLayout + RecyclerView 实现上拉加载下拉刷新
- SwipeRefreshLayout +RecycleView实现上拉加载更多和下拉刷新
- 采用SwipeFreshLayout+Recyclerview实现下拉刷新和上拉加载更多以及CoordinatorLayout的引入
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉自动加载
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉加载功能
- SwipeRefreshLayout+RecyclerView实现下拉刷新上拉自动加载
- 自己封装的工具类,使用原生SwipeRefreshLayout+RecycleView实现下拉刷新和加载更多
- SwipeRefreshLayout+RecyclerView 完成下拉刷新,上拉加载更多的自定义控件,简单好用
- SwipeRefreshLayout和RecyclerView实现下拉刷新和上拉加载
- Google自己的下拉刷新组件 SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- 详解RecyclerView+BGARefreshLayout实现自定义下拉刷新、上拉加载和侧滑删除效果
- Android LRecyclerView实现下拉刷新,滑动到底部自动加载更多
- 基于RecyclerView的封装,仿qq侧拉删除效果,实现下拉刷新,上拉加载更多,添加header,添加footer
- 使用SwipeRefreshLayout和RecyclerView实现仿“简书”下拉刷新和上拉加载更多
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- 4.5.2 SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新
- RecyclerView实现下拉刷新上拉加载更多