Android开发仿美团购物左右联动列表

概述

Android开发左右联动列表,仿照美团外卖点餐时,左右列表可以联动。

详细

Android开发仿美团购物左右联动列表

概述

左右联动列表是仿照美团外卖点餐时,左右列表可以联动。比如右边列表会有小项对应左边的,滑动时会置顶,滑动到下一个小项时,置顶会切换,并且左边列表的项也相应切换。同理,左边项的点击,右边的列表也会跟着滚动,对应的小项也会置顶。

详细

一、运行效果如下:

二、实现过程:

1、右边列表adapter

 

    public class RightAdapter extends RecyclerView.Adapter {private ArrayList<FoodBean> mList;private LayoutInflater mLayoutInflater;public RightAdapter(LayoutInflater layoutInflater, ArrayList<FoodBean> list) {this.mList = list;mLayoutInflater = layoutInflater;}private FoodBean getItem(int position) {return mList.get(position);}@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {return new RightViewHolder(mLayoutInflater.inflate(R.layout.listitem_right_content, parent, false));}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {FoodBean target = getItem(position);if (holder instanceof RightViewHolder) {((RightViewHolder) holder).bindBean(target);} else {throw new IllegalStateException("Illegal state Exception onBindviewHolder");}}@Overridepublic int getItemCount() {return mList.size();}private class RightViewHolder extends RecyclerView.ViewHolder {private TextView tvFoodTitle;private ImageView ivFood;RightViewHolder(View itemView) {super(itemView);tvFoodTitle = (TextView) itemView.findViewById(R.id.tv_food_title);ivFood = (ImageView) itemView.findViewById(R.id.iv_food);}void bindBean(final FoodBean bean) {tvFoodTitle.setText(bean.getFoodTitle());ivFood.setImageResource(bean.getImageResId());}}}  

其中FoodBean.class

    public class FoodBean {private int imageResId;private String foodTitle;//这是每小项的标题,用来滑动置顶用private String itemTitle;public FoodBean(int imageResId, String foodTitle,String itemTitle) {this.imageResId = imageResId;this.foodTitle = foodTitle;this.itemTitle = itemTitle;}public FoodBean(int imageResId, String foodTitle) {this.imageResId = imageResId;this.foodTitle = foodTitle;}public String getItemTitle() {return itemTitle;}public void setItemTitle(String itemTitle) {this.itemTitle = itemTitle;}public int getImageResId() {return imageResId;}public void setImageResId(int imageResId) {this.imageResId = imageResId;}public String getFoodTitle() {return foodTitle;}public void setFoodTitle(String foodTitle) {this.foodTitle = foodTitle;}}
2、左边adapter
    public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.LeftViewHolder> {private ArrayList<LeftBean> mList;private OnItemClickListener onItemClickListener;public LeftAdapter( ArrayList<LeftBean> list) {this.mList = list;}public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.onItemClickListener = onItemClickListener;}private LeftBean getItem(int position) {return mList.get(position);}@Overridepublic LeftViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_left_content,parent,false);return new LeftViewHolder(view);}@Overridepublic void onBindViewHolder(LeftViewHolder holder, int position) {LeftBean target = getItem(position);holder.tvTitle.setText(target.getTitle());if (target.isSelect()){holder.itemView.setBackgroundColor(ContextCompat.getColor(holder.itemView.getContext(), R.color.white));} else {holder.itemView.setBackgroundColor(ContextCompat.getColor(holder.itemView.getContext(), R.color.c_aaa));}//绑定监听事件holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Log.v("onClick",position+"\t");if (onItemClickListener != null){onItemClickListener.onItemClicked(getItem(position).getRightPosition());}for (LeftBean bean:mList){bean.setSelect(false);}getItem(position).setSelect(true);notifyDataSetChanged();}});}@Overridepublic int getItemCount() {return mList.size();}public static class LeftViewHolder extends RecyclerView.ViewHolder {private final TextView tvTitle;//private View cl_left_item;LeftViewHolder(View itemView) {super(itemView);tvTitle = (TextView) itemView.findViewById(R.id.tv_title);}}interface OnItemClickListener {void onItemClicked(int rightPosition );}public void setCurrentPosition(int rightPosition){for (LeftBean bean:mList){if (bean.getRightPosition() == rightPosition){bean.setSelect(true);} else {bean.setSelect(false);}}notifyDataSetChanged();}public String getCurrentTitle(){String currentTitle = "";for (LeftBean bean:mList){if (bean.isSelect()){currentTitle = bean.getTitle();break;}}return currentTitle;}}  

主要处理点击左边项目的选中状态,并将右边的小项的position回调出去给右边列表使用
其中LeftBean.class

    public class LeftBean {//记录右边列表置顶项所在的item的位置private int rightPosition;private String title;//设置是否选中,改变背景色private boolean isSelect;public LeftBean(int rightPosition, String title) {this.rightPosition = rightPosition;this.title = title;}public boolean isSelect() {return isSelect;}public void setSelect(boolean select) {isSelect = select;}public int getRightPosition() {return rightPosition;}public void setRightPosition(int rightPosition) {this.rightPosition = rightPosition;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}}  

三、项目结构图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/112890.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试 - 数字序列比大小 - 贪心算法(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 A&#xff0c;B两个人万一个数字比大小的游戏&#xff0c;在游戏前&#xff0c;两个人会拿…

【1267. 统计参与通信的服务器】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff…

Linux系统文件权限修改:permission denied

最近遇到文件夹权限的问题 通过命令发现www缺少写和执行的权限 然后赋予所有权限 下面是一些详解&#xff1a; 要赋予文件或目录写入权限&#xff0c;可以使用 chmod 命令。 命令的基本语法是&#xff1a; chmod <permissions> <file or directory>其中 <…

CSA研讨会|聚焦云原生安全,探讨技术与应用策略

为产业数字化保驾护航&#xff0c; 云原生安全体系如何有效抵御网络威胁&#xff1f; 网络安全的下一个十年&#xff0c; 云原生安全是网络安全创新之路吗&#xff1f; CNAPP部署现状&#xff0c;你了解多少&#xff1f; 9月6日&#xff08;周三&#xff09;下午14&#xff1a…

自动泊车的自动驾驶控制算法

1. 自动泊车系统 自动泊车系统(AutomatedParkingASSiSt,APA)利用车辆搭载的传感器感知车辆周边环境,扫描满足当前车辆停放的障碍物空间车位或线车位,并通过人机交互(HumanMachine Interface,HMI)获取驾驶员对目标车位的选择或自动确定目标车位,自动规划泊车路径,通过控制器向车…

17.CSS发光按钮悬停特效

效果 源码 <!DOCTYPE html> <html> <head><title>CSS Modern Button</title><link rel="stylesheet" type="text/css" href="style.css"> </head> <body><a href="#" style=&quo…

使用awvs进行web安全扫描

1、安装 docker pull secfa/docker-awvs docker run -it -d -name awvs -p 13443:3443 --cap-add LINUX_IMMUTABLE secfa/docker-awvs2、账号密码 # https://ip:13443/ # 用户名:adminadmin.com # 密码:Admin1233、使用 ps:需要征得甲方的同意

SPSS--s04典型相关分析

典型相关基本原理 典型相关分析是主成分分析和因子分析的进一步发展 ,是研究两组变量间的相互依赖关系 ,把两组变量之间的相互关系变为研究两个新的变量之间的相关,而且又不抛弃原来变量的信息 ,这两个新的变量分别由第一组变量和第二组变量的线性组合构成 ,并且两组变量的个数…

Java“牵手”1688淘口令转换API接口数据,1688API接口申请指南

1688平台商品淘口令接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取1688商品的标题、价格、库存、商品快递费用&#xff0c;宝贝ID&#xff0c;发货地&#xff0c;区域ID&#xff0c;快递费用&#xff0c;月销量、总销量、库存、详情描…

Oracle跨库访问DBLINK

1. DBLINK的介绍 Oracle在进行跨库访问时&#xff0c;可以创建DBLINK实现&#xff0c;比如要将UAT的表数据灌入开发环境&#xff0c;则可以使用UAT库为数据源&#xff0c;通过DBLINK实现将查出的数据灌入开发库。 简而言之就是在当前数据库中访问另一个数据库中的表中的数据 2…

Redis 持久化和发布订阅

一、持久化 Redis 是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&#xff0c;那么一旦服务器进程退出&#xff0c;服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能&#xff01; 1.1、RDB&#xff08;Redis DataBase&#xff09; 1.1.1 …

Stable Diffusion 提示词入门指南

前言 本文主要讲解 Stable Diffusion &#xff08;下文简称 SD&#xff09;提示词的用法&#xff0c;帮助大家生成更高质量的图片 本章节主要讲解文生图&#xff0c;其他类型读者可以自行探索。同时本文主要是以 Stable Diffusion Discard 的形式生成图片 如果各位对于图片隐…

第 7 章 排序算法(6)(快速排序)

7.9快速排序 7.9.1快速排序法介绍: 快速排序&#xff08;Quicksort&#xff09;是对冒泡排序的一种改进。基本思想是&#xff1a;通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对…

leetcode 823. 带因子的二叉树(dp+双指针+Long类型)

leetcode 823. 带因子的二叉树(dp双指针Long类型) 题目表述 给出一个含有不重复整数元素的数组 arr &#xff0c;每个整数 arr[i] 均大于 1。 用这些整数来构建二叉树&#xff0c;每个整数可以使用任意次数。其中&#xff1a;每个非叶结点的值应等于它的两个子结点的值的乘积…

OpenAI发布ChatGPT企业级版本

本周一&#xff08;2023年8月28日&#xff09;OpenAI 推出了 ChatGPT Enterprise&#xff0c;这是它在 4 月份推出的以业务为中心的订阅服务。该公司表示&#xff0c;根据新计划&#xff0c;不会使用任何业务数据或对话来训练其人工智能模型。 “我们的模型不会从你的使用情况中…

7.接着跑一下triton官方教程

5.Model Ensemble 在此示例中&#xff0c;我们将探索使用模型集成来仅通过单个网络调用在服务器端执行多个模型。这样做的好处是减少了在客户端和服务器之间复制数据的次数&#xff0c;并消除了网络调用固有的一些延迟。 为了说明创建模型集成的过程&#xff0c;我们将重用第…

2023年8月30日-[SWPUCTF 2021 新生赛]jicao

<?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;} ?> 包含了flag.php文件&#xff0c;设定了一个POST请求的id和…

c++ qt--事件过滤(第七部分)

c qt–事件过滤&#xff08;第七部分&#xff09; 一.为什么要用事件过滤 上一篇博客中我们用到了事件来进行一些更加细致的操作&#xff0c;如监控鼠标的按下与抬起&#xff0c;但是我们发现如果有很多的组件那每个组件都要创建一个类&#xff0c;这样就显得很麻烦&#xff…

【DRONECAN】(三)WSL2 及 ubuntu20.04 CAN 驱动安装

【DRONECAN】&#xff08;三&#xff09;WSL2 及 ubuntu20.04 CAN 驱动安装 前言 这一篇文章主要介绍一下 WSL2 及 ubuntu20.04 CAN 驱动的安装&#xff0c;首先说一下介绍本文的目的。 大家肯定都接触过 ubuntu 系统&#xff0c;但是我们常用的操作系统都是 Windows&#x…

Canvas实现3D效果

3D 球 效果图 代码 var canvas document.getElementById("cas"),ctx canvas.getContext("2d"),vpx canvas.width / 2,vpy canvas.height / 2,Radius 150,balls [],angleX Math.PI / 1000,angleY Math.PI / 1000,factor 0.0001 //旋转因子var An…