RecycleView实现查看全部,折叠效果

标签: Android

首先先看图示效果

这个是收起的一个效果

 

这是展示全部的一个效果

代码实现

第一步

题目已经指出,咱用的是recycle  所以就要创建一个recycleview

recyc.xml

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycle"
    android:background="@color/white"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

有了recycleview之后,咱得自定义一个item

pay_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="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:gravity="center_horizontal"
    android:orientation="vertical"

    >
    <com.yichen.xuezhifan.util.XCRoundImageView
        android:id="@+id/concern_img"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_margin="10dp"
        android:scaleType="fitCenter"
        app:type="circle"
        android:src="@mipmap/xiaofan_headline"
        />

    <TextView
        android:id="@+id/tea_name"
        android:textColor="@color/black"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />
    <!--<TextView-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_height="wrap_content"-->
        <!--android:textSize="10dp"-->
        <!--android:padding="5dp"-->
        <!--android:text="数学老师"-->
        <!--/>-->
</LinearLayout>

我一般把这种列表开发称为‘三件套’开发:recycleview(listview)、item、适配器

接下来就是适配器,注意前方高能     因为本人手懒所以一些view都没换, 如果有幸被看到这篇文章而有些地方有些晦涩难懂的话,可以留言评论

public class PayMyTeaAdapter2 extends RecyclerView.Adapter<PayMyTeaAdapter2.MyViewHolder> {
    
    private Context context;
    private List<MyTeacherModel> list;
    
    //判断是footview还是正常的item
    private static final int NORMAL_VIEW = 0;
    private static final int FOOT_VIEW = 1;
    //这个是作为以后扩展留的
    private int view = 0;
    //判断是否显示全部
    private int status = 0;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public void setNewDate(List<MyTeacherModel> list) {
        //为了延续开发
        this.list = list == null ? new ArrayList<MyTeacherModel>() : list;
        notifyDataSetChanged();
    }

    private OnItemClickListener onItemClickListener = null;


    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public PayMyTeaAdapter2(Context context, List<MyTeacherModel> list) {
        this.context = context;
        this.list = list;
    }


    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.from(context).inflate(R.layout.my_pay_user, viewGroup, false);
        return new MyViewHolder(itemView, i);

    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {

        if (getItemViewType(i) == NORMAL_VIEW) {
            initView(myViewHolder, i);
            myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (onItemClickListener != null) {
                        onItemClickListener.onItemClick(v, i, view);
                    }
                }
            });
        } else {
            if (status == 0) {
                changeStaus(myViewHolder);
            } else {
                resumeStatus(myViewHolder);
            }

        }

    }

    public void changeStaus(MyViewHolder myViewHolder) {
        myViewHolder.textView.setText("查看全部");
        GlideApp.with(context).load(R.mipmap.open).into(myViewHolder.imageView);
        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onItemClickListener != null) {
                    onItemClickListener.onItemClickAll();
                }
            }
        });
    }

    public void resumeStatus(MyViewHolder myViewHolder) {
        myViewHolder.textView.setText("收起");
        GlideApp.with(context).load(R.mipmap.pack).into(myViewHolder.imageView);
        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onItemClickListener != null) {
                    onItemClickListener.onItemPick();
                }
            }
        });

    }

    public void initView(MyViewHolder myViewHolder, int i) {
        if (list.get(i) != null) {
            if (list.get(i).getYc_avatar() != null) {
                GlideApp.with(context).load(list.get(i).getYc_avatar()).into(myViewHolder.imageView);
            } else {
                GlideApp.with(context).load(R.mipmap.xiaofan_headline).into(myViewHolder.imageView);
            }
            if (list.get(i).getYc_video_name().equals("2")) {
                myViewHolder.textView.setText(list.get(i).getYc_nickname());
            } else {
                myViewHolder.textView.setText(list.get(i).getYc_username());

            }

        }


    }

    @Override
    public int getItemViewType(int position) {
        if (position == getItemCount() - 1 && list.size() > 7) {
            return FOOT_VIEW;
        }
        return NORMAL_VIEW;
    }

    //返回item数量
    @Override
    public int getItemCount() {
        if (status == 0) {
            if (list.size() > 7) {
                return 7;
            } else {
                return list.size();
            }
        } else {
            return list.size() + 1;
        }

    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        TextView textView;

        public MyViewHolder(@NonNull View itemView, int v) {
            super(itemView);
            textView = itemView.findViewById(R.id.tea_name);
            imageView = itemView.findViewById(R.id.concern_img);

        }
    }

    //回调接口
    public interface OnItemClickListener {
        void onItemClick(View v, int position, int view);

        void onItemClickAll();

        void onItemPick();

    }
}

好了以上就是三件套的内容至于在activity中怎么实现,我只给关键代码咯因为接下来巨简单

 recyclerView2.setAdapter(adapter3);
        adapter3.setOnItemClickListener(new PayMyTeaAdapter2.OnItemClickListener() {
            @Override
            public void onItemClick(View v, int position, int view) {

               

            }

            @Override
            public void onItemClickAll() {
                //这是展示回调
                adapter3.setStatus(1);
                adapter3.setNewDate(myTeacherModel);

            }

            @Override
            public void onItemPick() {
                //这是收起回调
                adapter3.setStatus(0);
                adapter3.setNewDate(myTeacherModel);
            }
        });

以上就是文章开头效果图的代码实现~

 

版权声明:本文为weixin_43885787原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43885787/article/details/90043313

智能推荐

2018.8.27

2018.8.27...

HTML 表单元素的基本样式

HTML 表单元素的基本样式 原创 ixygj197875 发布于2018-02-22 17:48:53 阅读数 2296 收藏 更新于2018-05-20 15:35:58 分类专栏: 揭秘 CSS 揭秘 CSS 收起 表单元素主要包括 label、input、textarea、select、datalist、******、progress、meter、output等,以及对表单元素进行分组的 ...

php输出语句

php输出语句 常见的输出语句 echo(): 可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。 print(): 函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。 print_r(): 可以把字符串和数字简单地打印出来,而数组则以括起来的键和值...

工厂模式

简介 常见的实例化对象模式。 用工厂方法替代new操作的一种模式。 当我们使用new操作实例化对象时,调用构造函数完成初始化。若初始化仅是进行赋值等简单的操作,写入构造函数即可。但如果初始化时需要执行一长串复杂的代码,将多个工作装入一个方法,是不妥的。 创建实例与使用实例分离。将创建实例所需的大量初始化工作从基类的构造函数中分离出去。 简单工厂模式、工厂方法模式针对的是一个产品等级结构;而抽象工厂...

B1105 Spiral Matrix (画图)

B1105 Spiral Matrix (25分) //第一次只拿了21分 矩阵的长和宽,求最大因子,从sqrt(num)开始枚举. 每次循环一次,s++,t--,d--,r++ 测试点四运行超时,是因为输入一个数字的时候,需要直接输出这个数字。//1分 测试点二运行超时,最后一个数字不必再while循环一次,直接输出即可。//3分 最后一个测试点卡了好久/(ㄒoㄒ)/~~ 螺旋矩阵...

猜你喜欢

Java基础=>String,StringBuffer与StringBuilder的区别

字符串常量池 什么是字符串常量池? JVM为了减少字符串对象的重复创建,其维护了一块特殊的内存,这段内存被称为字符串常量池(存储在方法区中)。 具体实现 当代码中出现字符串时,JVM首先会对其进行检查。 如果字符串常量池中存在相同内容的字符串对象,如果有,则不再创建,直接返回这个对象的地址返回。 如果字符串常量池中不存在相同内容的字符串对象,则创建一个新的字符串对象并放入常量池,并返回新创建的字符...

java调用其他java项目的Https接口

项目中是这样的: 用户拿出二维码展示,让机器识别二维码, 机器调用开门的后台系统接口, 然后开门的后台系统接口需要调用管理系统的接口, 管理系统需要判断能不能开门.这两个系统是互相独立的.当时使用http调用是没有问题的.当时后来要求必须用https.废话不说,直接代码: 我的项目中调用的是 HttpsUtils.Get(utlStr) 这个接口 开门系统接口如下图:   管理系统的接口...

Hadoop1.2.1全分布式模式配置

一 集群规划 主机名            IP                               安装的软件 &nbs...

Go语言gin框架的安装

尝试安装了一下gin,把遇到的一些小问题来记录一下 安装步骤 首先来看看官方文档,链接点这里 可以看到安装步骤很简单,就一句话 在命令行中输入这句话运行等待就好。 问题来了,因为墙的问题,go get会很慢,所以命令行里面半天什么反应也没有,不要急,慢慢等着就会看到gin-gonic/gin这个目录出现 这个时候命令行还是没有结束,表示还在下一些东西。有的时候可能心急的人就停了(比如我),然后写个...

uni-app表单组件二

input(输入框) 属性名 类型 说明 平台差异 value String 输入框的初始内容 type String input 的类型 password Boolean(默认false) 是否是密码类型 placeholder String 输入框为空时占位符 placeholder-style String 指定 placeholder 的样式 placeholder-class Strin...