Android Studio使用recyclerview实现展开和折叠功能(在之前的微信页面基础之上)

作者:qq_41206634 时间:2023-10-31 23:08:55 

Android中RecyclerView点击item展开列表详细内容

效果如下:

Android Studio使用recyclerview实现展开和折叠功能(在之前的微信页面基础之上)

Android Studio使用recyclerview实现展开和折叠功能(在之前的微信页面基础之上)

依然是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
  • asp之家 软件编程 m.aspxhome.com