Android 之路65---RecyclerView

导读

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>

显示结果

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_37527943/article/details/80248841