Android--Google官方下拉刷新SwipeRefreshLayout(附加增加上拉加载)
2016-07-01 16:43
316 查看
Demo_SwipeRefreshLayout
转载请注明地址:http://blog.csdn.net/skyunicorn/article/details/51802724
下拉刷新是用系统的控件,但是这控件本身不带有上拉加载,上拉加载需要在ListView的Adapter中设置
需要V4包的支持
compile 'com.android.support:support-v4:23.4.0'
布局
代码设置
覆写onRefresh()方法
在主函数中添加RecyclerView的滑动监听
上拉加载,在Adapter中设置2套布局,一套是默认的item布局,一套是底部加载的显示布局
效果图
Demo地址:http://download.csdn.net/detail/skyunicorn/9565101
转载请注明地址:http://blog.csdn.net/skyunicorn/article/details/51802724
下拉刷新是用系统的控件,但是这控件本身不带有上拉加载,上拉加载需要在ListView的Adapter中设置
需要V4包的支持
compile 'com.android.support:support-v4:23.4.0'
布局
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/srl" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.demo.demo_swiperefreshlayout.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="5dp" android:scrollbars="vertical"></android.support.v7.widget.RecyclerView> </android.support.v4.widget.SwipeRefreshLayout>
代码设置
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.srl); // 刷新监听事件,必须有 swipeRefreshLayout.setOnRefreshListener(this); // 设置进度圈的背景色 // swipeRefreshLayout.setProgressBackgroundColor(R.color.colorAccent); // 设置进度动画的颜色,可以使用多种颜色 swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark);
覆写onRefresh()方法
// 设置下拉刷新 @Override public void onRefresh() { initBDatas(); // 关闭加载进度条 mSwipeRefreshLayout.setRefreshing(false); }
在主函数中添加RecyclerView的滑动监听
// RecyclerView的滑动监听事件 private RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() { private int lastVisibleItem; // 滑动状态改变 @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); /** * scrollState有三种状态,分别是SCROLL_STATE_IDLE、SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING * SCROLL_STATE_IDLE是当屏幕停止滚动时 * SCROLL_STATE_TOUCH_SCROLL是当用户在以触屏方式滚动屏幕并且手指仍然还在屏幕上时 * SCROLL_STATE_FLING是当用户由于之前划动屏幕并抬起手指,屏幕产生惯性滑动时 */ if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == mAdapter.getItemCount() && mAdapter.isShowFooter()) { // 上拉加载更多 initAData(); // LogUtils.d(TAG, "loading more data"); // mNewsPresenter.loadNews(mType, pageIndex + Urls.PAZE_SIZE); } } // 滑动位置 @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); // 给lastVisibleItem赋值 // findLastVisibleItemPosition()是返回最后一个item的位置 lastVisibleItem = mLayoutManager.findLastVisibleItemPosition(); } };
上拉加载,在Adapter中设置2套布局,一套是默认的item布局,一套是底部加载的显示布局
package com.demo.demo_swiperefreshlayout; 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 java.util.List; /** * Created by YangJW on 2016/7/1 09:37. */ public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { // 设置底部布局 private static final int TYPE_FOOTER = 0; // 设置默认布局 private static final int TYPE_DEFAULT = 1; // 数据源 private List<String> mData; // 上下文 private Context mContext; // 判断是不是最后一个item,默认是true private boolean mShowFooter = true; // 构造函数 public MyAdapter(Context mContext) { this.mContext = mContext; } // 设置数据并刷新 public void setData(List<String> Data) { this.mData = Data; this.notifyDataSetChanged(); } // 设置不同的item @Override public int getItemViewType(int position) { // 判断当前位置+1是不是等于数据总数(因为数组从0开始计数),是的就加载底部布局刷新,不是就加载默认布局 if (position + 1 == getItemCount()) { return TYPE_FOOTER; } else { return TYPE_DEFAULT; } } // 设置布局(相当于设置convertView) @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_DEFAULT) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item, parent, false); DefaultViewHolder vh = new DefaultViewHolder(v); return vh; } else { // 实例化布局 View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.footer, null); // 代码实现加载布局 view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return new FooterViewHolder(view); } } // 在布局中加载数据(绑定数据) @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { // 用来在运行时指出对象是某一个对象 if (holder instanceof DefaultViewHolder) { String str = mData.get(position); if (str == null) { return; } ((DefaultViewHolder) holder).tv.setText(str); } } // 获取数据数目 @Override public int getItemCount() { // 判断是不是显示底部,是就返回1,不是返回0 int begin = mShowFooter? 1 : 0; // 没有数据的时候,直接返回begin if (mData == null) { return begin; } // 因为底部布局要占一个位置,所以总数目要+1 return mData.size() + begin; } // 设置是否显示底部加载提示(将值传递给全局变量) public void isShowFooter(boolean showFooter) { this.mShowFooter = showFooter; } // 判断是否显示底部,数据来自全局变量 public boolean isShowFooter() { return this.mShowFooter; } // 底部布局的ViewHolder public class FooterViewHolder extends RecyclerView.ViewHolder { public FooterViewHolder(View view) { super(view); } } // 默认布局的ViewHolder public class DefaultViewHolder extends RecyclerView.ViewHolder { public TextView tv; public DefaultViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv); } } }
效果图
Demo地址:http://download.csdn.net/detail/skyunicorn/9565101
相关文章推荐
- SwipeRefreshLayout 与 CoordinatorLayout 嵌套刷新
- Google 下拉刷新控件SwipeRefreshLayout
- android SwipeRefreshLayout下拉刷新实现
- 关于SwipeRefreshLayout和RecyclerView混合使用的代码示例
- Android 5.0 之SwipeRefreshLayout
- Android学习笔记——SwipeRefreshLayout 官方下拉刷新控件介绍
- Android SwipeRefreshLayout控件
- RecyclerView的下拉刷新和自动加载更多
- ViewPager内嵌ViewPager以及与SwipeRefreshLayout冲突的问题
- Google官方版下拉刷新控件SwipeRefreshLayout解析
- webview与swiperefreshlayout滑动冲突
- Android SwipeRefreshLayout 、RecyclerView 下拉刷新冲突
- 【SwipeRefreshLayout】Google官方下拉刷新组件
- SwipeRefreshLayout配合RecyclerView实现下拉刷新和上拉加载更多以及没有数据的显示
- Android官方刷新组件 SwipeRefreshLayout 的使用
- SwipeRefreshLayout采坑笔记
- Android 中SwipeRefreshLayout刷新动画不显示的问题
- 解决Android SwipeRefreshLayout & RecyclerView使用的Bug
- Android SwipeRefreshLayout 官方下拉刷新控件介绍
- RecyclerView,SwipeRefreshLayout,CardView最新控件的使用