(1)将recyclerview导入到项目中
android studio:
在dependencies{中添加
compile 'com.android.support:recyclerview-v7:21.+'
(2)SwipeRefreshLayout下拉刷新
SwipeRefrshLayout是Google官方更新的一个Widget,可以实现下拉刷新的效果。该控件集成自ViewGroup在support-v4兼容包下,不过我们需要升级supportlibrary的版本到19.1以上。基本使用的方法如下:
- setOnRefreshListener(OnRefreshListener):添加下拉刷新监听器
- setRefreshing(boolean):显示或者隐藏刷新进度条
- isRefreshing():检查是否处于刷新状态
- setColorSchemeResources():设置进度条的颜色主题,最多设置四种,以前的setColorScheme()方法已经弃用了。
1.SwipeRefreshLayout本身自带下拉刷新的效果,那么我们可以选择在RecyclerView布局外部嵌套一层SwipeRefreshLayout布局即可,具体布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.recycleview.MainActivity">
<include layout="@layout/common_top_bar_layout"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/demo_swiperefreshlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/demo_recycler"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
></android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
下拉刷新监听代码如下
/**
* 上拉刷新
*/
mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Log.d("zttjiangqq","invoke onRefresh...");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
List<Recycler> newDatas = new ArrayList<Recycler>();
int[] image= new int[] { R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
for (int i = 0; i <image.length; i++) {
newDatas.add(new Recycler(image[i],"上拉刷新数据","2015-7-29 15:3" + i));
}
mAdapter.addItem(newDatas);
mSwipeRefresh.setRefreshing(false);
Toast.makeText(MainActivity.this, "更新了五条数据...", Toast.LENGTH_SHORT).show();
}
}, 5000);
}
});
(4)
Recycler
View
设置滚动事件加入上拉加载更多功能
/**
* 下拉加载
*/
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState ==RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 ==mAdapter.getItemCount()) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
List<Recycler> newDatas = new ArrayList<Recycler>();
int[] image= new int[] { R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
for (int i = 0; i <image.length; i++) {
newDatas.add(new Recycler(image[i],"下拉加载数据","2015-7-29 15:3" + i));
}
mAdapter.addMoreItem(newDatas);
Toast.makeText(MainActivity.this, "加载了五条数据...", Toast.LENGTH_SHORT).show();
}
},1000);
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastVisibleItem =manager.findLastVisibleItemPosition();
}
});
}
好了,看下整体项目的源码
实体类Recycler.java
package com.example.recycleview;
import android.media.Image;
import java.io.Serializable;
/**
* Created by 付刚 on 2017/11/21.
*/
public class Recycler implements Serializable{
private int imageId;
private String title;
private String time;
public Recycler(int imageId, String title, String time) {
super();
this.imageId = imageId;
this.title = title;
this.time = time;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
MainActivity.java
package com.example.recycleview;
import android.app.ProgressDialog;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.util.TypedValue;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import static com.example.recycleview.R.id.demo_swiperefreshlayout;
public class MainActivity extends AppCompatActivity {
private SwipeRefreshLayout mSwipeRefresh;
private HomeAdapter mAdapter;
private RecyclerView recyclerView;
private LinearLayoutManager manager;
private LinearLayout line;
private TextView tv;
private ProgressDialog pd;
private List<Recycler> list;
private int lastVisibleItem;
/**
* 图片id
*/
private int[] imageId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();//初始化控件
initData();//初始化数据
setListener();//设置监听事件
}
private void setListener() {
/**
* 上拉刷新
*/
mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Log.d("zttjiangqq","invoke onRefresh...");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
List<Recycler> newDatas = new ArrayList<Recycler>();
int[] image= new int[] { R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
for (int i = 0; i <image.length; i++) {
newDatas.add(new Recycler(image[i],"上拉刷新数据","2015-7-29 15:3" + i));
}
mAdapter.addItem(newDatas);
mSwipeRefresh.setRefreshing(false);
Toast.makeText(MainActivity.this, "更新了五条数据...", Toast.LENGTH_SHORT).show();
}
}, 5000);
}
});
/**
* 下拉加载
*/
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState ==RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 ==mAdapter.getItemCount()) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
List<Recycler> newDatas = new ArrayList<Recycler>();
int[] image= new int[] { R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
for (int i = 0; i <image.length; i++) {
newDatas.add(new Recycler(image[i],"下拉加载数据","2015-7-29 15:3" + i));
}
mAdapter.addMoreItem(newDatas);
Toast.makeText(MainActivity.this, "加载了五条数据...", Toast.LENGTH_SHORT).show();
}
},1000);
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastVisibleItem =manager.findLastVisibleItemPosition();
}
});
}
private void initData() {
// 1.获取图片的数据
imageId = new int[] { R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,R.mipmap.ic_launcher ,R.mipmap.ic_launcher };
list = new ArrayList<Recycler>();
for (int i = 0; i < imageId.length; i++) {
list.add(new Recycler(imageId[i], "羊信息", "2015-7-29 15:3" + i));
}
tv.setText("RecyclerView下拉刷新,下拉加载更多...");
mSwipeRefresh.setProgressBackgroundColorSchemeResource(android.R.color.white);
mSwipeRefresh.setColorSchemeResources(android.R.color.holo_blue_light,
android.R.color.holo_red_light,android.R.color.holo_orange_light,
android.R.color.holo_green_light);
mSwipeRefresh.setProgressViewOffset(false, 0, (int) TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources()
.getDisplayMetrics()));
manager=new LinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(manager);
mAdapter=new HomeAdapter(list);
recyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
private void initViews() {
mSwipeRefresh= (SwipeRefreshLayout) findViewById(demo_swiperefreshlayout);
recyclerView= (RecyclerView) findViewById(R.id.demo_recycler);
tv= (TextView) findViewById(R.id.top_bar_title);
line= (LinearLayout) findViewById(R.id.top_bar_linear_back);
}
}
适配器HomeAdapter.java
package com.example.recycleview;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
/**
* Created by fg on 2017/11/21.
*/
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder>{
private List<Recycler> list;
public HomeAdapter(List<Recycler> list) {
this.list = list;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item,null);
ViewHolder vh=new ViewHolder(view);
vh.recycler_item_image=view.findViewById(R.id.photo);
vh.recycler_item_name=view.findViewById(R.id.name);
vh.recycler_item_time=view.findViewById(R.id.time);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Recycler rc = list.get(position);
holder.recycler_item_image.setImageResource(rc.getImageId());
holder.recycler_item_name.setText(rc.getTitle());
holder.recycler_item_time.setText(rc.getTime());
}
@Override
public int getItemCount() {
return list.isEmpty() ? 0 : list.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
private ImageView recycler_item_image;
private TextView recycler_item_name, recycler_item_time;
public ViewHolder(View itemView) {
super(itemView);
}
}
//添加数据
public void addItem(List<Recycler> newDatas) {
//mTitles.add(position, data);
//notifyItemInserted(position);
newDatas.addAll(list);
list.removeAll(list);
list.addAll(newDatas);
notifyDataSetChanged();
}
public void addMoreItem(List<Recycler> newDatas) {
list.addAll(newDatas);
notifyDataSetChanged();
}
}