Android Studio使用recyclerview实现展开和折叠功能(在之前的微信页面基础之上)
作者:qq_41206634 时间:2023-10-31 23:08:55
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
标签:android,studio,recyclerview,展开,折叠
0
投稿
猜你喜欢
Spring Security整合CAS的示例代码
2023-11-12 19:04:26
在C#中使用OpenCV(使用OpenCVSharp)的实现
2023-02-21 16:15:38
Java多线程Future松获取异步任务结果轻松实现
2022-11-22 15:49:38
Java String 拼接字符串原理详解
2023-05-14 10:10:33
c#调用qq邮箱smtp发送邮件修改版代码分享
2023-04-03 11:11:31
C# dataset存放多张表的实例
2022-10-10 14:08:13
Android自定义View用切图显示字符串
2023-03-13 07:14:58
Java源码解析之接口List
2022-06-13 08:46:44
C#实现五子棋游戏
2022-07-26 12:55:34
kotlin基础教程之类和继承
2023-09-24 07:55:53
springboot 自定义异常并捕获异常返给前端的实现代码
2022-07-23 03:09:52
Android观察者模式实例分析
2022-07-24 09:21:32
Android使用RecyclerView仿美团分类界面
2022-10-03 09:52:23
Java中的ThreadLocal详解
2023-01-02 16:02:21
Java上传文件图片到服务器的方法
2022-12-06 01:40:46
java泛型详解
2023-06-07 23:54:47
Android 8.0系统中应用图标的适配微技巧
2022-09-29 00:22:26
Java Unsafe类实现原理及测试代码
2023-03-10 21:18:13
Spring类型转换 ConversionSerivce Convertor解析
2022-03-25 06:55:46
Java数据结构中堆的向下和向上调整解析
2022-01-02 07:34:58