不多说,直接上代码
1、调用方式:
MyAdapter myAdapter = new MyAdapter(this); myAdapter.setmList(list);//list自定义数据
2、MyAdapter类
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private Context mContext; private List<DataIconBean> mList; private ExpandableViewHoldersUtil.KeepOneHolder<ViewHolder> keepOne; public void setmList(List<DataIconBean> mList) { this.mList = mList; } public MyAdapter(Context context, UpDateListener listener) { super(); mContext = context; } @Override public int getItemCount() { return mList.size(); } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item_add_custom_layout, viewGroup, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) { Log.d("Logger", "MyAdapter onBindViewHolder: " + position); keepOne.bind(viewHolder, position); if (mList == null) { return; } //TODO第一层显示样式处理 viewHolder.relativeLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { keepOne.toggle(viewHolder); } }); viewHolder.iv_editone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mListener.onEdit(bean); } }); viewHolder.img_select.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { keepOne.toggle(viewHolder); } }); ItemIconAddListAdapter menuAdapter = new ItemIconAddListAdapter(listItemBaseBean); //第二层展示样式 viewHolder.rc_item.setLayoutManager(new GridLayoutManager(mContext, 5)); menuAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) { //TODO 自己的逻辑 } }); viewHolder.rc_item.setAdapter(menuAdapter); } class ViewHolder extends RecyclerView.ViewHolder implements ExpandableViewHoldersUtil.Expandable, View.OnClickListener, View.OnLongClickListener { TextView tv_icon_name; ImageView img_select; ImageView img_icon; ImageView iv_editone; RecyclerView rc_item; RelativeLayout relativeLayout; public ViewHolder(@NonNull View itemView) { super(itemView); img_icon = itemView.findViewById(R.id.img_icon); img_select = itemView.findViewById(R.id.img_select); rc_item = itemView.findViewById(R.id.rc_item); tv_icon_name = itemView.findViewById(R.id.tv_icon_name); relativeLayout = itemView.findViewById(R.id.ll_item); keepOne = ExpandableViewHoldersUtil.getInstance().getKeepOneHolder(); iv_editone = itemView.findViewById(R.id.iv_editone); rc_item.setVisibility(View.GONE); rc_item.setAlpha(0); } @Override public View getExpandView() { return rc_item; } @Override public void doCustomAnim(boolean isOpen) {//旋转指定图片 if (isOpen) { ExpandableViewHoldersUtil.getInstance().rotateExpandIcon(img_select, 90, 0); } else { ExpandableViewHoldersUtil.getInstance().rotateExpandIcon(img_select, 0, 90); } } @Override public void onClick(View view) { int position = (int) view.getTag(); Log.d("Logger", "ViewHolder onClick: "); } @Override public boolean onLongClick(View view) { int position = (int) view.getTag(); Log.d("Logger", "ViewHolder onLongClick: "); return false; } } } 布局文件item_add_custom_layout.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/layout_feed_back" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="13dp" > <RelativeLayout android:id="@+id/ll_item" android:layout_width="match_parent" android:layout_height="56dp" android:paddingLeft="13dp" android:paddingRight="13dp" android:orientation="horizontal"> <ImageView android:id="@+id/img_select" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="2dp" android:background="@drawable/icon_left_item_default" /> <LinearLayout android:id="@+id/ll_icon_bg" android:layout_width="40dp" android:layout_height="40dp" android:layout_centerVertical="true" android:layout_marginLeft="18dp" android:layout_toRightOf="@+id/img_select" android:background="@drawable/bg_circle" android:gravity="center"> <ImageView android:id="@+id/img_icon" android:layout_width="24dp" android:layout_height="24dp" android:layout_centerInParent="true" android:src="@drawable/icon_expense_dining" /> </LinearLayout> <TextView android:id="@+id/tv_icon_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="19dp" android:layout_toRightOf="@+id/ll_icon_bg" android:text="餐饮" android:textColor="@color/black" /> <ImageView android:id="@+id/iv_editone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:src="@drawable/icon_dot" /> </RelativeLayout> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rc_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/ll_item" android:background="@drawable/shape_listitem_gray" android:paddingLeft="13dp" android:paddingRight="13dp" android:paddingBottom="15dp" /> </RelativeLayout>
3、第二层Adapter
public class ItemIconAddListAdapter extends BaseQuickAdapter<ItemBaseBean, BaseViewHolder> { public ItemIconAddListAdapter(List<ItemBaseBean> list) { super(R.layout.item_two_icon_layout,list); } @Override protected void convert(@NotNull BaseViewHolder helper, ItemBaseBean data) { //TODO 显示样式 } }
效果图: