导读
1.简介
2.RecyclerView的基础使用(有问题)
3.实现瀑布流
4.添加分割线
5.加载不同布局并设置动画(有问题)
6.添加响应事件
7.下拉刷新
简介
导入依赖
RecyclerView的基础使用
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.air.recyclerview">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/activity_base_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.imooc.recyclerview.BaseRecyclerViewActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
</android.support.v4.widget.SwipeRefreshLayout>
simple_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="150dp"
android:orientation="vertical">
<ImageView
android:scaleType="fitXY"
android:id="@+id/imageView"
android:layout_width="200dp"
android:layout_height="150dp" />
</LinearLayout>
MyAdapter.java
package com.example.air.recyclerview.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.ImageView;
import com.bumptech.glide.Glide;
import com.example.air.recyclerview.R;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MainViewHolder>{
private List<String> list;//要显示的数据
private Context context;//创建视图时需要
public MyAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
}
@Override
public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建视图
View view = LayoutInflater.from(context).inflate(R.layout.simple_item,parent,false);
//实例化MainViewHolder----传View过去
MainViewHolder holder=new MainViewHolder(view);
return holder;
}
/**
* 初始化控件
*/
public static class MainViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public MainViewHolder(View itemView) {
super(itemView);
imageView=(ImageView)itemView.findViewById(R.id.imageView);
}
}
/**
* 填充数据
*/
@Override
public void onBindViewHolder(MainViewHolder holder, int position) {
String url=list.get(position);
Glide.with(context).load(url).into(holder.imageView);
}
/**
* 获取item的总个数
*/
@Override
public int getItemCount() {
return list.size();
}
}
ImageData.java
package com.example.air.recyclerview.module;
import java.util.List;
public class ImageData {
private int status;
private String msg;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public static class DataBean {
private int id;
private String name;
private String picSmall;
private String description;
private int learner;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPicSmall() {
return picSmall;
}
public void setPicSmall(String picSmall) {
this.picSmall = picSmall;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getLearner() {
return learner;
}
public void setLearner(int learner) {
this.learner = learner;
}
}
}
JsonUtil.java
package com.example.air.recyclerview.utils;
//这里也是要导入依赖的
import com.google.gson.Gson;
import com.google.gson.JsonNull;
import java.lang.reflect.Type;
public class JsonUtil {
private static Gson gson=new Gson();
private JsonUtil(){}
public static String toJson(Object src){
if(src==null){
return gson.toJson(JsonNull.INSTANCE);
}
return gson.toJson(src);
}
public static <T>Object fromJson(String json, Class<T>classOfT){
return gson.fromJson(json,(Type)classOfT);
}
}
MainActivity.java
package com.example.air.recyclerview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.example.air.recyclerview.adapter.MyAdapter;
import com.example.air.recyclerview.module.ImageData;
import com.example.air.recyclerview.utils.JsonUtil;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List resList=new ArrayList();
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
RecyclerView recyclerView=(RecyclerView)findViewById(R.id.recyclerView);
//设置布局管理器 参数2显示的列数
GridLayoutManager gridLayoutManager=new GridLayoutManager(this,3);
recyclerView.setLayoutManager(gridLayoutManager);
//设置数据源 本例通过网络请求的方法获得
requestData();
//设置适配器
adapter=new MyAdapter(this,resList);
recyclerView.setAdapter(adapter);
}
private void requestData() {
OkHttpClient mOkHttpClient=new OkHttpClient();
Request.Builder requestBuilder=new Request.Builder().url("http://www.imooc.com/api/teacher?type=2&page=1");
Request request =requestBuilder.build();
Call mcall=mOkHttpClient.newCall(request);
mcall.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
String res=response.body().string();
ImageData imageData=(ImageData) JsonUtil.fromJson(res,ImageData.class);
List<ImageData.DataBean> data=imageData.getData();
for(int i=0;i<data.size();i++){
ImageData.DataBean dataBean=data.get(i);
String picBig=dataBean.getPicSmall();
resList.add(picBig);
}
adapter.notifyDataSetChanged();
}
});
}
}
实现瀑布流(本地加载图片)
⚠️其他文件不变化
image_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:scaleType="fitXY"
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
ImageAdapter.java
package com.example.air.recyclerview.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.ImageView;
import android.widget.LinearLayout;
import com.example.air.recyclerview.R;
import java.util.List;
import java.util.Random;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MainViewHolder>{
private Context context;//创建视图时需要
private List<Integer> resList;//要显示的数据
public ImageAdapter(Context context, List<Integer> list) {
this.context = context;
this.resList = list;
}
/**
* 创建视图
*/
@Override
public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建视图
View view = LayoutInflater.from(context).inflate(R.layout.image_item,parent,false);
//实例化MainViewHolder----传View过去
MainViewHolder holder=new MainViewHolder(view);
return holder;
}
/**
* 初始化控件
*/
public static class MainViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public MainViewHolder(View itemView) {
super(itemView);
imageView=(ImageView)itemView.findViewById(R.id.imageView);
}
}
/**
* 填充数据
*/
@Override
public void onBindViewHolder(MainViewHolder holder, int position) {
holder.imageView.setBackgroundResource(resList.get(position));
//实例化Random对象
Random random=new Random();
int height=random.nextInt(1000);
holder.imageView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,height));
}
/**
* 获取item的总个数
*/
@Override
public int getItemCount() {
return resList.size();
}
}
SpacesItemDecoration.java
package com.example.air.recyclerview.module;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* 添加间距
*/
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpacesItemDecoration(int space){
this.space=space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.top=space;
outRect.bottom=space;
outRect.left=space;
outRect.right=space;
}
}
MainActivity.java
package com.example.air.recyclerview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import com.example.air.recyclerview.adapter.ImageAdapter;
import com.example.air.recyclerview.module.SpacesItemDecoration;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List list;
private List<Integer>resList=new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
//设置layoutManager
StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
//设置数据源
initData();
ImageAdapter imageAdapter=new ImageAdapter(this,resList);
recyclerView.setAdapter(imageAdapter);
//设置间距
SpacesItemDecoration spacesItemDecoration=new SpacesItemDecoration(10);
recyclerView.addItemDecoration(spacesItemDecoration);
}
private void initData() {
for(int i=0;i<6;i++){
resList.add(R.drawable.example1);
resList.add(R.drawable.example2);
resList.add(R.drawable.example3);
}
}
}
显示结果
添加分割线
⚠️其他文件一样
SplitAdapter.java
package com.example.air.recyclerview.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 java.util.List;
public class SplitAdapter extends RecyclerView.Adapter<SplitAdapter.MainViewHolder>{
private List<String> list;//要显示的数据
private Context context;//创建视图时需要
public SplitAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
}
@Override
public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建视图
View view = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1,parent,false);
//实例化MainViewHolder----传View过去
MainViewHolder holder=new MainViewHolder(view);
return holder;
}
/**
* 初始化控件
*/
public static class MainViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public MainViewHolder(View itemView) {
super(itemView);
textView=(TextView)itemView.findViewById(android.R.id.text1);
}
}
/**
* 填充数据
*/
@Override
public void onBindViewHolder(MainViewHolder holder, int position) {
holder.textView.setText(list.get(position));
}
/**
* 获取item的总个数
*/
@Override
public int getItemCount() {
return list.size();
}
}
RecycleViewDivider.java
package com.example.air.recyclerview;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class RecycleViewDivider extends RecyclerView.ItemDecoration {
private Paint mPaint;
private Drawable mDivider;
private int mDividerHeight=2;
private int mOrientation;
private static final int[]ATTRS=new int[]{android.R.attr.listDivider};
/**
* 自定义分割线
* @param context
* @param orientation 列表方向
*/
public RecycleViewDivider(Context context, int orientation){
if(orientation!=LinearLayoutManager.VERTICAL && orientation!=LinearLayoutManager.HORIZONTAL){
throw new IllegalArgumentException("请输入正确的参数");
}
mOrientation=orientation;
final TypedArray a=context.obtainStyledAttributes(ATTRS);
mDivider=a.getDrawable(0);
a.recycle();;
}
/**
*自定义分割线
* @param context
* @param orientation 列表方向
* @param drawableId 分割线图片
*/
public RecycleViewDivider(Context context, int orientation,int drawableId){
this(context,orientation);
mDivider= ContextCompat.getDrawable(context,drawableId);
mDividerHeight=mDivider.getIntrinsicHeight();
}
/**
*自定义分割线
* @param context
* @param orientation 列表方向
* @param dividerHeight 分割线高度
* @param dividerColor 分割线颜色
*/
public RecycleViewDivider(Context context, int orientation,int dividerHeight,int dividerColor){
this(context,orientation);
mDividerHeight=dividerHeight;
mPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(dividerColor);
mPaint.setStyle(Paint.Style.FILL);
}
/**
* 获取分割线尺寸
* @param outRect
* @param view
* @param parent
* @param state
*/
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(0,0,0,mDividerHeight);
}
/**
* 绘制分割线
* @param c
* @param parent
* @param state
*/
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
if(mOrientation== LinearLayoutManager.VERTICAL){
drawVertical(c,parent);
}else {
drawHorizontal(c,parent);
}
}
//绘制纵向 item 分割线
private void drawVertical(Canvas canvas, RecyclerView parent){
final int top = parent.getPaddingTop();
final int bottom = parent.getMeasuredHeight()-parent.getPaddingBottom();
final int childSize = parent.getChildCount();
for (int i = 0; i < childSize; i++) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();
final int left = child.getRight()+layoutParams.rightMargin;
final int right = left + mDividerHeight;
if(mDivider!=null){
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
if(mPaint!=null){
canvas.drawRect(left, top, right, bottom,mPaint);
}
}
}
//绘制横向 item 分割线
private void drawHorizontal(Canvas canvas, RecyclerView parent){
final int left=parent.getPaddingLeft();
final int right=parent.getMeasuredWidth()-parent.getPaddingRight();
final int childSize=parent.getChildCount();
for(int i=0;i<childSize;i++){
final View child=parent.getChildAt(i);
RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getBottom()+layoutParams.bottomMargin;
final int bottom = top+mDividerHeight;
if(mDivider !=null){
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
if(mPaint !=null){
canvas.drawRect(left, top, right, bottom,mPaint);
}
}
}
}
MainActivity.java
package com.example.air.recyclerview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.example.air.recyclerview.adapter.SplitAdapter;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List list;
private List<String>resList=new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
//设置layoutManager
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
//设置数据源
initData();
//设置Adapter
SplitAdapter splitAdapter=new SplitAdapter(this,resList);
recyclerView.setAdapter(splitAdapter);
//设置分割线
RecycleViewDivider recyclerViewDivider=new RecycleViewDivider(this,LinearLayoutManager.HORIZONTAL,5,127);
recyclerView.addItemDecoration(recyclerViewDivider);
}
private void initData() {
for(int i=0;i<30;i++){
resList.add("Emilia Clark"+i);
}
}
}
显示图片
加载不同布局并设置动画
Chat.java
package com.example.air.recyclerview.module;
public class Chat {
private String content;//内容
private int type;//类型
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
ChatAdapter.java
package com.example.air.recyclerview.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.ImageView;
import android.widget.TextView;
import com.example.air.recyclerview.R;
import com.example.air.recyclerview.module.Chat;
import java.util.List;
public class ChatAdapter extends RecyclerView.Adapter {
/**
* 填充数据
*/
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Chat chat=list.get(position);
String content=chat.getContent();
/**
* 发送方
*/
if(chat.getType()==0){
SendViewHolder sendViewHolder=(SendViewHolder)holder;
sendViewHolder.tvSend.setText(content);
}
/**
* 接收方
*/
else{
ReceiveViewHolder receiveViewHolder=(ReceiveViewHolder)holder;
receiveViewHolder.tvReceive.setText(content);
}
}
/**
* 创建发送方的ViewHolder
*/
public class SendViewHolder extends RecyclerView.ViewHolder{
TextView tvSend;
public SendViewHolder(View itemView) {
super(itemView);
/**
* 初始化控件
*/
tvSend=itemView.findViewById(R.id.tv_show);
}
}
/**
* 创建接收方的ViewHolder
*/
public class ReceiveViewHolder extends RecyclerView.ViewHolder{
TextView tvReceive;
public ReceiveViewHolder(View itemView) {
super(itemView);
/**
* 初始化控件
*/
tvReceive=itemView.findViewById(R.id.tv_show);
}
}
private List<Chat> list;//要显示的数据
private Context context;//创建视图时需要
public ChatAdapter(Context context, List<Chat> list) {
this.context = context;
this.list = list;
}
/**
* 创建视图
*/
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
/**
* 发送方
*/
if(viewType==0){
View sendView= LayoutInflater.from(context).inflate(R.layout.main_item,parent,false);
SendViewHolder sendViewHolder=new SendViewHolder(sendView);
return sendViewHolder;
}
/**
* 接收方
*/
else{
View receiveView= LayoutInflater.from(context).inflate(R.layout.main_item2,parent,false);
ReceiveViewHolder receiveViewHolder =new ReceiveViewHolder(receiveView);
return receiveViewHolder;
}
}
/**
* 初始化控件
*/
public static class MainViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public MainViewHolder(View itemView) {
super(itemView);
imageView=(ImageView)itemView.findViewById(R.id.imageView);
}
}
/**
* 获取item的总个数
*/
@Override
public int getItemCount() {
return list.size();
}
@Override
public int getItemViewType(int position) {
return list.get(position).getType();
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_chat_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/sendBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入发送"/>
<Button
android:id="@+id/receBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入接收"/>
<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除"/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycleView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
main_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:gravity="left|center"
android:background="@drawable/example2"
android:lineSpacingExtra="3dp"
android:minWidth="80dp"
android:maxWidth="225dp"
android:minHeight="40dp"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:paddingLeft="30dp"
android:paddingRight="15dp"/>
</LinearLayout>
main_item2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:gravity="right|center"
android:background="@drawable/example1"
android:lineSpacingExtra="3dp"
android:minWidth="80dp"
android:maxWidth="225dp"
android:minHeight="40dp"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:paddingLeft="15dp"
android:paddingRight="30dp"/>
</LinearLayout>
MainActivity.java
package com.example.air.recyclerview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import com.example.air.recyclerview.adapter.ChatAdapter;
import com.example.air.recyclerview.module.Chat;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List list;
private List<Chat> resList=new ArrayList<Chat>();
private Button send_btn,rece_btn,delete;
private RecyclerView recyclerView;
private ChatAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=findViewById(R.id.recycleView);
send_btn=findViewById(R.id.sendBtn);
rece_btn=findViewById(R.id.receBtn);
delete=findViewById(R.id.delete);
send_btn.setOnClickListener((View.OnClickListener) this);
rece_btn.setOnClickListener((View.OnClickListener) this);
delete.setOnClickListener((View.OnClickListener) this);
//设置layoutManager
GridLayoutManager gridLayoutManager=new GridLayoutManager(this,2);
recyclerView.setLayoutManager(gridLayoutManager);
//设置数据源
initData();
adapter=new ChatAdapter(this,resList);
recyclerView.setAdapter(adapter);
/**
* 设置RecyclerView item动画
*/
recyclerView.setItemAnimator(new DefaultItemAnimator());
}
private void initData() {
for(int i=0;i<6;i++){
Chat chat=new Chat();
chat.setType(0);
chat.setContent("发送方:你好");
resList.add(chat);
Chat chat2=new Chat();
chat2.setType(1);
chat2.setContent("接收方:你好!");
resList.add(chat2);
}
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.sendBtn:
{
Chat chat = new Chat();
chat.setContent("插入:发送");
chat.setType(0);
resList.add(1, chat);
adapter.notifyItemInserted(1);
break;
}
case R.id.receBtn:
{
Chat chat = new Chat();
chat.setContent("插入:接收");
chat.setType(1);
resList.add(1, chat);
adapter.notifyItemInserted(1);
break;
}
case R.id.delete:
{
resList.remove(resList.size()-2);
adapter.notifyItemRemoved(resList.size()-2);
break;
}
}
}
}
添加响应事件
⚠️其他文件保持不变(文件与基本使用的案例一样)
ImageClickAdapter.java
package com.example.air.recyclerview.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.ImageView;
import android.widget.LinearLayout;
import com.example.air.recyclerview.R;
import java.util.List;
import java.util.Random;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MainViewHolder>{
private Context context;//创建视图时需要
private List<Integer> resList;//要显示的数据
public ImageAdapter(Context context, List<Integer> list) {
this.context = context;
this.resList = list;
}
/**
* 创建视图
*/
@Override
public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//创建视图
View view = LayoutInflater.from(context).inflate(R.layout.image_item,parent,false);
//实例化MainViewHolder----传View过去
MainViewHolder holder=new MainViewHolder(view);
return holder;
}
/**
* 初始化控件
*/
public static class MainViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public MainViewHolder(View itemView) {
super(itemView);
imageView=(ImageView)itemView.findViewById(R.id.imageView);
}
}
/**
* 填充数据
*/
@Override
public void onBindViewHolder(MainViewHolder holder, int position) {
holder.imageView.setBackgroundResource(resList.get(position));
//实例化Random对象
Random random=new Random();
int height=random.nextInt(1000);
holder.imageView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,height));
}
/**
* 获取item的总个数
*/
@Override
public int getItemCount() {
return resList.size();
}
}
MainActivity.java
package com.example.air.recyclerview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.widget.Toast;
import com.example.air.recyclerview.adapter.ImageClickAdapter;
import com.example.air.recyclerview.module.ImageData;
import com.example.air.recyclerview.utils.JsonUtil;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List list;
private List<String>resList=new ArrayList();
private ImageClickAdapter imageClickAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycleView);
//设置layoutManager
StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
//设置数据源
requestData();
imageClickAdapter=new ImageClickAdapter(this,resList);
recyclerView.setAdapter(imageClickAdapter);
//设置间距
imageClickAdapter.setOnItemClickListener(new ImageClickAdapter.OnItemClickListener(){
@Override
public void OnItemClickListener(int itemPosition) {
Toast.makeText(MainActivity.this,"点击="+itemPosition,Toast.LENGTH_LONG).show();
}
});
imageClickAdapter.setOnItemLongClickListener(new ImageClickAdapter.OnItemLongClickListener(){
@Override
public void OnItemLongClickListener(int itemPosition) {
Toast.makeText(MainActivity.this,"长按="+itemPosition,Toast.LENGTH_LONG).show();
}
});
}
private void requestData() {
OkHttpClient mOkHttpClient=new OkHttpClient();
Request.Builder requestBuilder=new Request.Builder().url("http://www.imooc.com/api/teacher?type=2&page=1");
Request request =requestBuilder.build();
Call mcall=mOkHttpClient.newCall(request);
mcall.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
String res=response.body().string();
ImageData imageData=(ImageData) JsonUtil.fromJson(res,ImageData.class);
List<ImageData.DataBean> data=imageData.getData();
for(int i=0;i<data.size();i++){
ImageData.DataBean dataBean=data.get(i);
String picBig=dataBean.getPicSmall();
resList.add(picBig);
}
imageClickAdapter.notifyDataSetChanged();
}
});
}
}
下拉刷新
MainActivity.java
package com.example.air.recyclerview;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.example.air.recyclerview.adapter.SplitAdapter;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<String>list=new ArrayList();
private SplitAdapter adapter;
private SwipeRefreshLayout mySwipeRefreshLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycleView);
//设置layoutManager
GridLayoutManager gridLayoutManager=new GridLayoutManager(this,3);
recyclerView.setLayoutManager(gridLayoutManager);
//设置数据源
addData();
//设置Adapter
adapter=new SplitAdapter(MainActivity.this,list);
recyclerView.setAdapter(adapter);
mySwipeRefreshLayout= (SwipeRefreshLayout)findViewById(R.id.swipeRefreshLayout);
// mySwipeRefreshLayout.setColorSchemeResources( android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light );
mySwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener(){
@Override
public void onRefresh() {
//刷新动画开始后回调到此方法
addData();
adapter.notifyDataSetChanged();
mySwipeRefreshLayout.setRefreshing(false);
}
});
}
private void addData() {
for(int i=0;i<30;i++){
list.add("Emilia"+i);
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/activity_base_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.imooc.recyclerview.BaseRecyclerViewActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycleView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
</android.support.v4.widget.SwipeRefreshLayout>
显示结果