Android Studio使用recyclerview实现展开和折叠功能(在之前的微信页面基础之上)
作者:qq_41206634 发布时间:2023-10-31 23:08:55
标签:android,studio,recyclerview,展开,折叠
Android中RecyclerView点击item展开列表详细内容
效果如下:
依然是xml文件的设计,使用了两个RelativeLayout
,zu作为主布局和副布局,里面都加入textview显示内容,在副布局里加入一个imageview在这里插入图片描述作为子内容的背景图,代码如下:
tab01.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rl_parent"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#00574B">
<TextView
android:id="@+id/textViewparent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30dp"
android:layout_centerInParent="true"
android:textColor="@android:color/white"
tools:text="主布局" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/rl_child"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#ffffff"
android:visibility="gone">
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textViewchild"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="25dp"
android:textColor="#000000"
tools:text="副部局" />
</RelativeLayout>
</LinearLayout>
activity_main.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"
android:orientation="vertical">
<include layout="@layout/top" />
<FrameLayout
android:id="@+id/id_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</FrameLayout>
<include layout="@layout/bottom" />
</LinearLayout>
核心代码Adapter:
public class adapter extends RecyclerView.Adapter <adapter.myviewholder>{
private List<String> mlist=new ArrayList<>();
private Context context;
private View inflater;
private static final String tag=adapter.class.getSimpleName();
private int expandedPosition=1;
private myviewholder mViewHolder;
public adapter(Context context) {//,List<String> list
this.context=context;
}
public void setExpandCollapseDataList(List<String> list){
mlist=list;
notifyDataSetChanged();
}
@Override
public adapter.myviewholder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
inflater= LayoutInflater.from(context).inflate(R.layout.tab01,viewGroup,false);
myviewholder myviewholder=new myviewholder(inflater);
return myviewholder;
}
@Override
public void onBindViewHolder(final adapter.myviewholder myviewholder, final int j) {
myviewholder.textviewparent.setText(mlist.get(j));
myviewholder.imageview.setImageResource(R.drawable.p1);
myviewholder.textviewchild.setText(mlist.get(j+15));
final boolean isExpanded=j==expandedPosition;
myviewholder.rlChild.setVisibility(isExpanded ? View.VISIBLE : View.GONE);
myviewholder.rlParent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mViewHolder != null) {
mViewHolder.rlChild.setVisibility(View.GONE);
notifyItemChanged(expandedPosition);
}
expandedPosition = isExpanded ? -1 : myviewholder.getAdapterPosition();
mViewHolder = isExpanded ? null : myviewholder;
notifyItemChanged(myviewholder.getAdapterPosition());
}
});
}
@Override
public int getItemCount() {
return mlist == null ? 0 : mlist.size()/2;
}
class myviewholder extends RecyclerView.ViewHolder{
private ImageView imageview;
RelativeLayout rlParent, rlChild;
TextView textviewparent, textviewchild;
public myviewholder(View itemView) {
super(itemView);
rlParent = itemView.findViewById(R.id.rl_parent);
rlChild = itemView.findViewById(R.id.rl_child);
textviewparent = itemView.findViewById(R.id.textViewparent);
textviewchild = itemView.findViewById(R.id.textViewchild);
imageview=itemView.findViewById(R.id.imageview);
}
}
}
主要的代码是 ViewHolder
中 bindView() , onClick() 这两个方法对变量的操作。将list中前一半作为主布局数据,后一半作为副布局的数据生成。
数据和执行
private void initmyData() {
list.add("路德维希·凡·贝多芬");
list.add("萧友梅");
list.add("阿炳");
list.add("冼星海");
list.add("聂耳");
list.add("施光南");
list.add("弗里德里克·肖邦");
list.add("罗伯特·舒曼");
list.add("莫扎特");
list.add("约瑟夫·海顿");
list.add("舒伯特");
list.add("巴赫");
list.add("弗仑兹·李斯特");
list.add("约翰奈斯·勃拉姆斯");
list.add("门德尔松");
list.add("德国作曲家、钢琴家、指挥家,被称为乐圣。");
list.add("中国专业音乐教育的奠基人和开拓者、音乐理论家、作曲家。");
list.add("民间音乐家、二胡演奏家,誉为演奏能手。");
list.add("中国近代作曲家、钢琴家--人民音乐家。");
list.add("中国音乐家--时代歌手。");
list.add("誉为时代歌手,现代抒情歌曲作曲家。");
list.add("誉为钢琴诗人,波兰作曲家、钢琴家。");
list.add("德国著名作曲家、音乐评论家。");
list.add("奥地利作曲家,被誉为神童。");
list.add("奥地利作曲家,维也纳古典派奠基者之一。");
list.add("奥地利作曲家--前所未有的最富诗意的音乐家。");
list.add("德国最伟大的古典作曲家之一,管风琴演奏家。");
list.add("天才的匈牙利作曲家、钢琴家、指挥家和音乐活动家。");
list.add("德国十九世纪后半叶最卓越的、古典乐派最后的一位作曲家。");
list.add("德国著名作曲家。");
}
private void initView1() {
adapter adapter = new adapter(this);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
recyclerView.setAdapter(adapter);
adapter.setExpandCollapseDataList(list);
}
话不多说,上代码。
github源码地址:
链接: https://github.com/YL009/yl.
来源:https://blog.csdn.net/qq_41206634/article/details/105156398
0
投稿
猜你喜欢
- 特别提醒:一定要注意文件结构WebappApplication 一定要在包的最外层,否则Spring无法对所有的类进行托管,会造成@Auto
- 这篇文章主要介绍了spring boot多数据源动态切换代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 目录1、第一步2、第二步3、最后可以检查一下设计designer.cs的文件看看对不对很多初学者都想把默认的C#关闭按钮事件弄明白,主要用在
- 1.线程与进程进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是一个实体,一个进程中至少有一个线程,是CPU
- 前言在前面的2个章节中,一一哥 带大家实现了在Spring Security中添加图形验证码校验功能,其实Spring Security的功
- 本文实例讲述了Android编程实现获得内存剩余大小与总大小的方法。分享给大家供大家参考,具体如下:public class memInfo
- 如何使用必应地图 WPF 控件框架使用.NET40;Visual Studio 2019;Bing Maps WPF 控件需要&n
- 类和类有关联,将查询的结果注入到对象和对象的关联关系中Mybatis处理的关联关系 包括一对一关联 和 一对多关联 ,例如学生关联班级是一对
- 表:需求:将表中的数据,按照一级二级分类返回给前端json数据代码实现:java代码: public class ResultIndustr
- 在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如w
- 本文实例为大家分享了C#实现QQ聊天窗口的具体代码,供大家参考,具体内容如下效果图:using System;using System.Co
- 引言♀ 小AD:明哥,我终于出了这口恶气了。♂ 明世隐:打爽了是吧。♀ 小AD:那必须的,打十盘我赢九盘,我随意。♂ 明世隐:那小朋友不是搞
- Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式什么是Java线程同步
- 前置导入什么是多环境?其实就是说你的电脑上写的程序最终要放到别人的服务器上去运行。每个计算机环境不一样,这就是多环境。常见的多环境开发主要兼
- 嵌套表格,即在一张表格中的特定单元格中再插入一个或者多个表格,使用嵌套表格的优点在于能够让内容的布局更加合理,同时也方便程序套用。下面的示例
- SpringMVC中事务是否可以加在Controller层一般而言,事务都是加在Service层的,但是爱钻牛角尖的我时常想:事务加在Con
- using System;using System.Collections.Generic;using System.Web.Script.
- 数据绑定API用于JSON转换和使用属性访问或使用注解POJO(普通Java对象)。以下是它的两个类型。简单数据绑定 - 转换JSON,从J
- 传统的web项目,只需要在web.xml里配置多个即可,并且支持多个url-pattern在spring boot中,我们默认无需配置,系统
- Java 两种延时thread和timer详解及实例代码在Java中有时候需要使程序暂停一点时间,称为延时。普通延时用Thread.slee