一、需求分析

单各list列表实现很简单直接使用RecyclerView填充列表即可,那么多级列表该怎样实现呢,同样很简单,只需监听第一级列表的item点击事件再填充第二级列表即可实现。

二、代码实现

1、创建布局文件

由两个RecyclerView填充布局,左右分布

<?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="horizontal"><android.support.v7.widget.RecyclerViewandroid:id="@+id/rv_recyclerview_one"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:padding="10dp"></android.support.v7.widget.RecyclerView><android.support.v7.widget.RecyclerViewandroid:id="@+id/rv_recyclerview_two"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="2"android:padding="10dp"></android.support.v7.widget.RecyclerView>
</LinearLayout>
2、主Activity代码

由于注释写的很清楚,直接贴代码给大家看了

/*** 多列list* @author petergee* @date 2018/7/26*/
public class MultiColumnListActivity extends Activity {private List<String> list;private List<String> list2;private List<String> list3;private List<String> list4;private FirstLineAdapter firstLineAdapter,secondLineAdapter;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_multi_column);initData();initView();}private void initData() {list = new ArrayList<>();list.add("于谦");list.add("郭德纲");list.add("小岳岳");list2 = new ArrayList<>();list2.add("抽烟");list2.add("喝酒");list2.add("烫头");list3 = new ArrayList<>();list3.add("主持");list3.add("说相声");list3.add("拍电影");list4 = new ArrayList<>();list4.add("拍电影");list4.add("唱歌");list4.add("说相声");list4.add("做采访");}private void initView() {RecyclerView recyclerView=findViewById(R.id.rv_recyclerview_one);final RecyclerView recyclerViewTwo=findViewById(R.id.rv_recyclerview_two);// layoutManagerLinearLayoutManager layoutManager=new LinearLayoutManager(this);layoutManager.setOrientation(LinearLayoutManager.VERTICAL);// set layoutManagerrecyclerView.setLayoutManager(layoutManager);recyclerViewTwo.setLayoutManager(new LinearLayoutManager(this));// item DecorationDividerItemDecoration dividerItemDecoration=new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);dividerItemDecoration.setDrawable(getResources().getDrawable(R.drawable.divider_line));recyclerView.addItemDecoration(dividerItemDecoration);recyclerViewTwo.addItemDecoration(dividerItemDecoration);// item AnimatorrecyclerView.setItemAnimator(new DefaultItemAnimator());recyclerViewTwo.setItemAnimator(new DefaultItemAnimator());// adapterfirstLineAdapter = new FirstLineAdapter(this,list);secondLineAdapter = new FirstLineAdapter(this,list2);recyclerView.setAdapter(firstLineAdapter);// childAdapterrecyclerViewTwo.setAdapter(secondLineAdapter);// add listenerfirstLineAdapter.setRecyclerItemClickListener(new RecyclerItemClickListener() {@Overridepublic void onItemClickListener(int position) {if (position==0){secondLineAdapter=new FirstLineAdapter(getApplicationContext(),list2);recyclerViewTwo.setAdapter(secondLineAdapter);}if (position==1){secondLineAdapter=new FirstLineAdapter(getApplicationContext(),list3);recyclerViewTwo.setAdapter(secondLineAdapter);}if (position==2){secondLineAdapter=new FirstLineAdapter(getApplicationContext(),list4);recyclerViewTwo.setAdapter(secondLineAdapter);}}@Overridepublic void onItemLongClickListener(int position) {Toast.makeText(getApplicationContext(),"LongClicked "+list.get(position),Toast.LENGTH_SHORT).show();}});}
}
3、Adapter实现

由于需要使用ietm的点击事件,添加了接口,进行回调实现

/*** @author petergee* @date 2018/7/27*/
public class FirstLineAdapter extends RecyclerView.Adapter<viewHolder> {private Context mContext;private List<String> mList;public RecyclerItemClickListener recyclerItemClickListener;public FirstLineAdapter(Context context, List<String> list) {this.mContext = context;this.mList = list;}@NonNull@Overridepublic viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view= LayoutInflater.from(mContext).inflate(R.layout.item_multi_column_list,parent,false);return new viewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull viewHolder holder, final int position) {String str=mList.get(position);holder.tvTextFirstLine.setText(str);//item listenerholder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (recyclerItemClickListener==null){return;}recyclerItemClickListener.onItemClickListener(position);}});// item LongClickListenerholder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {if (recyclerItemClickListener!=null)recyclerItemClickListener.onItemLongClickListener(position);return false;}});}@Overridepublic int getItemCount() {return mList.size()==0?0:mList.size();}public void setRecyclerItemClickListener(RecyclerItemClickListener recyclerItemClickListener) {this.recyclerItemClickListener = recyclerItemClickListener;}
}class viewHolder extends RecyclerView.ViewHolder {TextView tvTextFirstLine;public viewHolder(View itemView) {super(itemView);tvTextFirstLine=itemView.findViewById(R.id.item_text);}
}
4、接口

添加了条目点击和长按事件监听回调方法

public interface RecyclerItemClickListener{void onItemClickListener(int position);void onItemLongClickListener(int position);
}
5、Adapter中item布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content">
<TextView
    android:id="@+id/item_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="16sp"android:textColor="@color/color_black"android:layout_centerHorizontal="true"android:layout_margin="5dp"/>
</RelativeLayout>

三、效果图

使用RecyclerView自定义实现二级联动列表相关推荐

  1. android 二级联动列表,Linkage-RecyclerView

    软件简介 Linkage-RecyclerView 是一款基于 MVP 架构开发的二级联动列表控件.它是因 "RxJava 魔法师" 这个项目的需求而存在. 在最初寻遍了 GitH ...

  2. Android PopupWindow+RecyclerView 实现二级联动筛选

    前言 这篇文章主要的功能是利用 PopupWindow 和  RecyclerView 实现条件筛选包括二级联动筛选,主要是仿小红书里的筛选功能而写的一个 Demo 效果如下,代码通俗易懂,保姆级教程 ...

  3. don't android xml,GitHub - KunMinX/Linkage-RecyclerView: 即使不用饿了么订餐,也请务必收藏好该库! 一行代码即可接入,二级联动订餐列表。...

    真香警告:即使不用饿了么订餐,也请务必收藏好该库! 由来 Linkage-RecyclerView 是一款基于 MVP 架构开发的二级联动列表控件.它是因 "RxJava 魔法师" ...

  4. vue一二级联动清空二级数据_【周一实用技巧】二级联动还不够,自动更新才最牛。Excel 2013利用数据验证条件制作一级、二级联动和自动更新下拉列表...

    Excel 2013实用技巧教程系列 第-9.4-节  下拉列表 下拉列表作为提高数据录入效率和防止错误数据的有效方法,在日常工作中应用非常普遍.除了一级.二级联动列表,小编excel小课堂(ID:e ...

  5. 前端:JS/35/二级联动菜单,select对象,select对象的属性,option对象,option对象属性,实例:省份列表与城市列表的联动

    二级联动菜单 select 对象 一个<select>标记,对应一个select对象: select对象的属性 1,options[] :设置或返回下拉列表中<option>标 ...

  6. EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库)

    EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库) 目录 EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库) 仓库 ...

  7. 谷粒学院(十)课程管理模块 | 课程大纲列表 | 二级联动 | 富文本编辑器

    一.课程添加分析 发布流程图 数据表对应 课程相关表的关系 二.课程管理–添加课程后端 1.使用代码生成器生成相关课程相关的代码 CodeGenerator类中生成 2.细节问题 (1)创建vo实体类 ...

  8. popwindow下拉筛选 二级联动_职场人必备!一分钟搞定Excel二级联动下拉菜单

    对于一级下拉菜单的设置,相信经常使用Excel的用户都不陌生,那么,二级联动下拉菜单又是什么呢?与一级下拉菜单有什么关系呢? 二级联动下拉菜单是根据一级下拉菜单内容的变化而变化的.大家都知道,不同的部 ...

  9. android省市二级联动的实现

    因为工作的关系,需要做一个省市二级联动. 1.首先,实现这个功能所用到的控件是android 的spinner 2.要做一个省市二级联动,首先我们要有所有省及其主要城市的数据,这里我给一个我的百度云的 ...

最新文章

  1. mysql 操作审计_利用mysql的audit审计功能记录用户操作信息
  2. 学习Git_12.10
  3. ubuntu apt-get方式安装软件的路径
  4. 钉钉小程序可以上传文件_怎样禁止钉钉外发文件?钉钉文件传输协议分析
  5. linux系统chmod缩写,文件属性控制命令chmod
  6. 使用OpenExif修改jpeg图片信息
  7. php 多维数组 列,总结PHP实现提取多维数组指定一列的方法
  8. python输出引号内的变量值_引号中的Python变量值
  9. tomcat的安装以及配置
  10. win10开启文件共享服务器,墨涩网 - Windows10开启局域网文件共享功能——墨涩网...
  11. 1×pbs缓冲液配方_PBS缓冲液配方.doc
  12. 第十篇:SpringBoot集成支付宝接口扫码支付
  13. 网络安全能力认证CCSC管理Ⅰ级认证
  14. 在QGIS中导入Google、Bing、高德等地图和卫星影像
  15. qs计算机专业排名2017,2017qs世界大学学科专业排名top10完整版
  16. ImageNet Classification with Deep Convolutional Neural Networks(AlexNet论文翻译(附原文))
  17. python3使用opencv读取raw格式图片并保存为bmp格式图片
  18. 苹果icloud登录_怎么取消iCloud云上贵州运营的扣费
  19. 笔记本wifi断流解决方法
  20. 2021年全球浮球液位开关收入大约654.3百万美元,预计2028年达到840.2百万美元

热门文章

  1. 鸿蒙系统全球发布,鸿蒙系统正式发布,全球瞩目!
  2. 大数据Spark(三十九):SparkStreaming实战案例四 窗口函数
  3. Excel效率手册:早做完,不加班(套装共3册)
  4. 数据结构c语言课程设计报告,(数据结构c语言课程设计报告.doc
  5. 卡图星小机器人怎么过_《瑞奇与叮当》图文攻略 全剧情流程图文攻略
  6. ShareSDK 抖音平台注册
  7. python的UnboundLocalError: local variable 'xxx' referenced b
  8. 柯伊玟导演作品《黑暗迷踪》顺利杀青
  9. 电路设计软件详谈,基于电路设计软件protel实现脉冲电路仿真
  10. 汉诺塔c语言执行步骤详解,详解汉诺塔执行过程