1、效果图

2、主要实现比较简单,首先data数据类

package com.example.mytestproject.recycle;import java.io.Serializable;
import java.util.List;public class RecyclerItem implements Serializable {private int icon;private String name;private List<Integer> iconList;public int getIcon() {return icon;}public void setIcon(int icon) {this.icon = icon;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<Integer> getIconList() {return iconList;}public void setIconList(List<Integer> iconList) {this.iconList = iconList;}
}

3、这里随意加载一些数据、和设置recyclerView横向显示

 mRecyclerView = findViewById(R.id.recyclerView);mAdapter = new HotelEntityAdapter(this);LinearLayoutManager layoutManager=new LinearLayoutManager(this);layoutManager.setOrientation(RecyclerView.HORIZONTAL);//设置header
//        manager.setSpanSizeLookup(new SectionedSpanSizeLookup(mAdapter,manager));mRecyclerView.setLayoutManager(layoutManager);mRecyclerView.setAdapter(mAdapter);for (int i=0;i<15;i++){mIconList.add(R.mipmap.item);}for (int i=0;i<5;i++){RecyclerItem recyclerItem = new RecyclerItem();recyclerItem.setIcon(R.mipmap.title);recyclerItem.setIconList(mIconList);mItemList.add(recyclerItem);}mAdapter.setData(mItemList);mAdapter.setOnItemClick(new HotelEntityAdapter.OnItemClickListener() {@Overridepublic void onItemClick(int section, int position) {Toast.makeText(RecyclerActivity.this,section+"=="+position,Toast.LENGTH_SHORT).show();}});

4、adapter的实现,传入数据后、加载两个布局显示、然后接口回调点击事件,代码比较简单。

package com.example.mytestproject.recycle;import android.content.Context;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.recyclerview.widget.RecyclerView;import com.example.mytestproject.R;import java.util.List;public class HotelEntityAdapter extends SectionedRecyclerViewAdapter<HeaderHolder, DescHolder, RecyclerView.ViewHolder> {public List<RecyclerItem> mRecyclerItemList;private Context mContext;private LayoutInflater mInflater;private SparseBooleanArray mBooleanMap;public HotelEntityAdapter(Context context) {mContext = context;mInflater = LayoutInflater.from(context);mBooleanMap = new SparseBooleanArray();}public void setData(List<RecyclerItem> allTagList) {this.mRecyclerItemList = allTagList;mBooleanMap.put(0, true);notifyDataSetChanged();}protected int getSectionCount() {int count = 0;if (mRecyclerItemList != null) {count = mRecyclerItemList.size();}return count;}@Overrideprotected int getItemCountForSection(int section) {int count = mRecyclerItemList.get(section).getIconList().size();if (count >= 1 && !mBooleanMap.get(section)) {count = 0;}if (section == 0 && mBooleanMap.get(section)) {count = mRecyclerItemList.get(section).getIconList().size();}return HotelUtils.isEmpty(mRecyclerItemList.get(section).getIconList()) ? 0 : count;}//是否有footer布局/*** 判断是否需要底部footer布局,在该例中,我们并不需要显示footer,所以默认返回false就可以,* 如果你对应的section需要展示footer布局,那么就在对应的section返回true就行了** @param section* @return*/@Overrideprotected boolean hasFooterInSection(int section) {return false;}@Overrideprotected HeaderHolder onCreateSectionHeaderViewHolder(ViewGroup parent, int viewType) {return new HeaderHolder(mInflater.inflate(R.layout.hotel_title_item, parent, false));}@Overrideprotected RecyclerView.ViewHolder onCreateSectionFooterViewHolder(ViewGroup parent, int viewType) {return null;}@Overrideprotected DescHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {return new DescHolder(mInflater.inflate(R.layout.hotel_desc_item, parent, false));}@Overrideprotected void onBindSectionHeaderViewHolder(final HeaderHolder holder, final int section) {holder.titleView.setText(mRecyclerItemList.get(section).getName());holder.openView.setImageResource(mRecyclerItemList.get(section).getIcon());holder.llHotel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {boolean isOpen = mBooleanMap.get(section);mBooleanMap.put(section, !isOpen);notifyDataSetChanged();}});}@Overrideprotected void onBindSectionFooterViewHolder(RecyclerView.ViewHolder holder, int section) {}/*** @param holder* @param section* @param position*/@Overrideprotected void onBindItemViewHolder(DescHolder holder, final int section, final int position) {holder.descView.setImageResource(mRecyclerItemList.get(section).getIconList().get(position));holder.descView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (onItemClickListener != null) {onItemClickListener.onItemClick(section, position);}}});}private OnItemClickListener onItemClickListener;public void setOnItemClick(OnItemClickListener listener) {this.onItemClickListener = listener;}public interface OnItemClickListener {void onItemClick(int section, int position);}
}

5、两个holder的代码主要就是一个图片显示,实现都是比较简单的。

package com.example.mytestproject.recycle;import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;import androidx.recyclerview.widget.RecyclerView;import com.example.mytestproject.R;public class HeaderHolder extends RecyclerView.ViewHolder {public TextView titleView;public ImageView openView;public LinearLayout llHotel;public HeaderHolder(View itemView) {super(itemView);initView();}private void initView() {titleView = (TextView) itemView.findViewById(R.id.tv_title);openView = (ImageView) itemView.findViewById(R.id.tv_icon);llHotel = itemView.findViewById(R.id.ll_hotel);}
}
package com.example.mytestproject.recycle;import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;import androidx.recyclerview.widget.RecyclerView;import com.example.mytestproject.R;public class DescHolder extends RecyclerView.ViewHolder {public ImageView descView;public DescHolder(View itemView) {super(itemView);initView();}private void initView() {descView = (ImageView) itemView.findViewById(R.id.iv_icon);}
}

这个主要是参考网上的一个二级页面稍作修改得来、想看具体实现代码可以自己下载https://download.csdn.net/download/u011324501/12615856,demo实现比较简单、里面还有自由绘图跟一个用户各种数据缓存的类。

Android recyclerView实现二级横向显示相关推荐

  1. Android RecyclerView +SnapHelper 实现横向滚动自动滚动到中心控件并选中

    效果图 此效果已被产品砍掉,所以有些适配bug就不修改了 此博客只为记录下代码 默哀3秒 1秒 2秒 3秒 代码 布局文件 <?xml version="1.0" encod ...

  2. Android 软键盘LatinIME横向显示不全

    最近因为项目需求,需要将屏幕的密度density从160改到240,修改后发现系统弹出的软键盘横向没有满屏,右边缺少了一部分.因此开始研究软键盘LatinME的代码逻辑,经过一天的不懈努力,总于找到了 ...

  3. Android RecyclerView 使用方法:垂直、横向、瀑布流

    说明: RecyclerView 使用好处:无感知刷新,局部刷新,性能提升. 这里是纯净的RecyclerView,有一篇能添加头部的RecyclerView:Android RecyclerView ...

  4. android ztree,ztree实现权限功能(横向显示)

    最近在做权限功能的时候,采用的ztree实现的,但是产品要求最后一层的权限节点要横向显示.开始在网上找的解决方案是用css样式把最后一层的display设置为inline.在我本地电脑上看了下.效果不 ...

  5. android gridview横向显示图片,Android使用Gridview单行横向滚动显示

    本文实例为大家分享了Android使用Gridview单行横向滚动显示的具体代码,供大家参考,具体内容如下 要想实现滚动显示,layout布局里必须要使用HorizontalScrollView,才能 ...

  6. Android RecyclerView 基本使用

    Android RecyclerView 基本使用 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用. 据官方的介绍,该控件用 ...

  7. Android RecyclerView(九)滑动监听综述

    Android RecyclerView(九)滑动监听 1 RecyclerView 的滑动监听 1.1 RecyclerView 设置滑动监听 mRecyclerView.setOnScrollLi ...

  8. Android RecyclerView 监听滑动

    今天,简单讲讲Android 如何监听滑动. 不废话了,主要是需要做一个功能,实现RecyclerView滑动时,让一个标题栏固定显示在顶部. 基本知识: 列表的滚动一般分为两种: 手指按下 -> ...

  9. Android RecyclerView(八)设置自定义 下拉刷新 与 上拉加载数据

    Android RecyclerView(八)设置下拉刷新 与 上拉加载数据 GitHub 项目源码 CSDN 博客说明 智慧安卓App 文章分析 下拉刷新效果 上拉加载数据效果 1 xml布局文件中 ...

最新文章

  1. 广域网设备:远程路由器/交换机/服务器—Vecloud
  2. 深入浅出UML类图(一)
  3. python 多进程 multiprocessing 进程池 pool apply_async()函数与apply()函数的用法
  4. Linux下RabbitMQ服务器搭建
  5. 使用Def文件导出dll
  6. java io 读取多个对象_Java IO系列(五):读写对象ObjectOutputStream和ObjectInputStream详解...
  7. 4.6.2 软件测试的步骤
  8. matlab怎么写集合,matlab集合操作
  9. 自动化测试的概念及工具
  10. Java技术——你真的了解String类的intern()方法吗
  11. Spring Cloud Stream与RabbitMQ 消费者 消息分组
  12. 一些简单的二维数学的算法。
  13. WampServer服务中MySQL无法正常启动解决方案
  14. 实现一个基于XDP/eBPF的学习型网桥
  15. 电脑、手机上那些让人用后欲罢不能的神器(附百度云链接)
  16. 探索式测试方法的实践
  17. 谁是史上最强-用爬虫分析IMDB TOP250电影数据
  18. SAT考试填空习题(一)及答案
  19. .bat 是什么? (批处理脚本)
  20. 与Simon,Warren,Neo,Paul同学聊天体会

热门文章

  1. Windows Vista Upgrade Advisor v1.0 - Windows Vista升级顾问(更新简体中文版)
  2. 八大排序:冒泡排序、插入排序、希尔排序、选择排序、堆排序、归并排序、快速排序、基数排序
  3. 使用插件NGUI制作小地图
  4. 炫舞时代服务器维护中怎么办,《炫舞时代》皇宫大区前世今生系统bug怎么办 异常问题解决及补偿介绍...
  5. 用 ggplot 重绘天猫双十一销售额图
  6. 彰显年轻时尚的个性主张,GalaxyA6s首销获市场认可
  7. 【云计算的1024种玩法】打造个人专属网盘
  8. JAVA毕设项目某服装店购物网站(java+VUE+Mybatis+Maven+Mysql)
  9. GIS实验之制作城市联系强度图
  10. Android开发相关faq