博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecycleView 实现多标签展开收起效果
阅读量:6196 次
发布时间:2019-06-21

本文共 3075 字,大约阅读时间需要 10 分钟。

最近的项目需要实现一个多标签展开收起的效果,具体效果如下

收起效果

展开效果
拿到效果图,很自然会想到用
RecyclerView 来实现,但是至于具体怎么去收起和展开,我这里用了个取巧的办法,可能不是最好的办法,但也能达到要求,在此,主要作为记录用,大神轻喷。 废话不多说,直接上代码才是最实在的。 外层布局代码:

复制代码

布局预览效果

这里点击展开和收起的按钮,我单独用了个
TextView 来实现,因为这样操作起来最简单,少了很多逻辑处理。(没办法,有点懒……) 接下来是
RecyclerView 中 item 的布局实现,代码如下:

复制代码

布局都写完了之后,我们直接看 adapter 适配器的实现代码:

public class MyAdapter extends RecyclerView.Adapter
{ private Context context; private List
list; public MyAdapter(Context context) { this.context = context; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(context).inflate(R.layout.item, parent, false); return new MyHolder(v); } @Override public void onBindViewHolder(MyHolder holder, final int position) { String name = list.get(position).getName() ; holder.tv.setText(name); } @Override public int getItemCount() { return list == null ? 0 : list.size(); } //隐藏 public void setHideList(List
newList) { this.list = newList; notifyDataSetChanged(); } //展开 public void setOpenList(List
openList) { this.list = openList; notifyDataSetChanged(); } //不需要隐藏/展开 public void setRealList(List
realList) { this.list = realList; notifyDataSetChanged(); } //清除数据 public void clearData() { if (list != null) { this.list.clear(); notifyDataSetChanged(); } } class MyHolder extends RecyclerView.ViewHolder { TextView tv; public MyHolder(View itemView) { super(itemView); tv = itemView.findViewById(R.id.tvName); } }}复制代码

TextView 绑定展开收起事件

/**         * 处理展开收缩的逻辑         */        tvOpenTips.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (isOpen) {                    adapter.setHideList(hideList);                    tvOpenTips.setText("展开全部");                    tvOpenTips.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.detail_open, 0);                    isOpen = false;                } else {                    adapter.setOpenList(openList);                    tvOpenTips.setText("收起全部");                    tvOpenTips.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.detail_close, 0);                    isOpen = true;                }            }        });复制代码

设置展开收起的数据源

private void setData() {        if (list.size() > 4) { //设置大于多少条数据开始隐藏            for (int i = 0, j = list.size(); i < j; i++) {                openList.add(list.get(i));            }            for (int i = 0; i < 4; i++) {                hideList.add(list.get(i));            }            adapter.setHideList(hideList);        } else {            adapter.setRealList(list);        }        tvOpenTips.setVisibility(list.size() > 4 ? View.VISIBLE : View.GONE);        rv.setAdapter(adapter);    }复制代码

转载地址:http://nsfca.baihongyu.com/

你可能感兴趣的文章
一点总结
查看>>
Adobe发布Air 2.5支持RIM平板电脑
查看>>
RSA总裁宣布:云计算是彻底转变安全交付方式的机会
查看>>
利用Attribute简化Unity框架IOC注入
查看>>
vim乱码问题
查看>>
shell中find使用
查看>>
Struts2的OGNL标签详解
查看>>
(笔记)TSL235新型光感器件--强烈推荐使用
查看>>
HDOJ 1232 畅通工程
查看>>
A标签实现文件下载功能
查看>>
Centos上安装配置docker(命令集)
查看>>
Android——Handler 多线程
查看>>
NB 命令安装需似机(无图型化安装)
查看>>
ARM Mysql c 通信
查看>>
在 Typescript 2.0 中使用 @types 类型定义
查看>>
C#实现 OPC历史数据存取研究
查看>>
#### 高薪 ##招聘:。。。。。 待遇非常不错。
查看>>
Excel多条件匹配
查看>>
新的生活新的开始
查看>>
DCOM Server Process Launcher启动不了的解决办法
查看>>