软件编程
位置:首页>> 软件编程>> Android编程>> Android Studio使用recyclerview实现展开和折叠功能(在之前的微信页面基础之上)

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

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

标签:android,studio,recyclerview,展开,折叠

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com