Androidstudio开发,实现商品分类

文章目录

    • 1. 功能需求
    • 2. 代码实现过程
        • 1. 编写布局文件
        • 2. 创建商品分类(Adapter)适配器
        • 3. 实现商品分类Activity
        • 4. 在res/values/ 下新建 array.xml ,用于添加商品分类数据
        • 5. 效果演示
    • 6. 关于作者其它项目视频教程介绍

1. 功能需求

在这里插入图片描述

  1. 显示商品分类数据
  2. 当分类数据超过一屏时,可以左右滑动显示
  3. 点击当前商品分类时,需要高亮显示,并且默认第一个商品分类选中

2. 代码实现过程

1. 编写布局文件

创建一个布局文件activity_main.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:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- TODO: Update blank fragment layout --><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/purple_200"app:title="商品分类"app:titleTextColor="@color/white" /><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_below="@id/toolbar"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/topRecyclerView"android:layout_width="match_parent"android:layout_height="wrap_content" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#f5f5f5"app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /><androidx.appcompat.widget.LinearLayoutCompatandroid:id="@+id/empty_view"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="80dp"android:src="@mipmap/img_empty" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="暂无数据~" /></androidx.appcompat.widget.LinearLayoutCompat></RelativeLayout></androidx.appcompat.widget.LinearLayoutCompat></androidx.appcompat.widget.LinearLayoutCompat></RelativeLayout>
2. 创建商品分类(Adapter)适配器
public class CategoryListAdapter extends RecyclerView.Adapter<CategoryListAdapter.MyHolder> {private List<String> categoryList = new ArrayList<>();private int currentPosition = 0;public void setCategoryList(List<String> categoryList) {this.categoryList = categoryList;notifyDataSetChanged();}@NonNull@Overridepublic MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {return new MyHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_category_list, parent, false));}@Overridepublic void onBindViewHolder(@NonNull MyHolder holder, int position) {//绑定数据holder.tv_category_name.setText(categoryList.get(position));if (position == currentPosition) {holder.category_bg.setVisibility(View.VISIBLE);holder.tv_category_name.setTextColor(Color.parseColor("#333333"));} else {holder.category_bg.setVisibility(View.GONE);holder.tv_category_name.setTextColor(Color.parseColor("#666666"));}holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (onItemClickListener != null) {onItemClickListener.onItemClick(position);}}});}@Overridepublic int getItemCount() {return categoryList.size();}static class MyHolder extends RecyclerView.ViewHolder {TextView tv_category_name;View category_bg;public MyHolder(@NonNull View itemView) {super(itemView);tv_category_name =itemView.findViewById(R.id.tv_category_name);category_bg =itemView.findViewById(R.id.category_bg);}}public void setCurrentPosition(int currentPosition) {this.currentPosition = currentPosition;notifyDataSetChanged();}//设置回调public interface OnItemClickListener {void onItemClick(int position);}private OnItemClickListener onItemClickListener;public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.onItemClickListener = onItemClickListener;}
}

对应布局文件item_category_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"><RelativeLayoutandroid:layout_width="wrap_content"android:layout_height="40dp"android:layout_marginLeft="16dp"android:layout_marginRight="16dp"><Viewandroid:id="@+id/category_bg"android:layout_width="40dp"android:layout_height="6dp"android:layout_alignParentBottom="true"android:layout_centerInParent="true"android:layout_marginBottom="12dp"android:background="#FF8C00" /><TextViewandroid:id="@+id/tv_category_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:gravity="center"android:text="新品推荐"android:textColor="#333333" /></RelativeLayout></LinearLayout>
3. 实现商品分类Activity

MainActivity中,初始化控件,绑定adapter,并实现点击事件

public class MainActivity extends AppCompatActivity {private RecyclerView topRecyclerView;private CategoryListAdapter mCategoryListAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化控件topRecyclerView = findViewById(R.id.topRecyclerView);//设置布局管理器  可以横向滑动topRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false));//初始化适配器mCategoryListAdapter = new CategoryListAdapter();//设置适配器topRecyclerView.setAdapter(mCategoryListAdapter);//获取数据String[] stringArray = getResources().getStringArray(R.array.goods_type);mCategoryListAdapter.setCategoryList(Arrays.asList(stringArray));//topRecyclerView点击事件mCategoryListAdapter.setOnItemClickListener(new CategoryListAdapter.OnItemClickListener() {@Overridepublic void onItemClick(int position) {mCategoryListAdapter.setCurrentPosition(position);}});}
}
4. 在res/values/ 下新建 array.xml ,用于添加商品分类数据

新建array.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<resources><!--    商品分类-->
<string-array name="goods_type"><item>食品饮料</item><item>日用百货</item><item>母婴用品</item><item>家居电器</item><item>美妆个护</item><item>服饰鞋帽</item><item>数码产品</item><item>文体用品</item><item>医药保健</item><item>宠物用品</item>
</string-array></resources>
5. 效果演示

在这里插入图片描述

6. 关于作者其它项目视频教程介绍

  1. Android新闻资讯app实战:https://www.bilibili.com/video/BV1CA1vYoEad/?vd_source=984bb03f768809c7d33f20179343d8c8
  2. Androidstudio开发购物商城实战:https://www.bilibili.com/video/BV1PjHfeXE8U/?vd_source=984bb03f768809c7d33f20179343d8c8
  3. Android开发备忘录记事本实战:https://www.bilibili.com/video/BV1FJ4m1u76G?vd_source=984bb03f768809c7d33f20179343d8c8&spm_id_from=333.788.videopod.sections
  4. Androidstudio底部导航栏实现:https://www.bilibili.com/video/BV1XB4y1d7et/?spm_id_from=333.337.search-card.all.click&vd_source=984bb03f768809c7d33f20179343d8c8
  5. Android使用TabLayout+ViewPager2实现左右滑动切换:https://www.bilibili.com/video/BV1Mz4y1c7eX/?spm_id_from=333.337.search-card.all.click&vd_source=984bb03f768809c7d33f20179343d8c8

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

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

相关文章

Linux快速安装docker和docker-componse步骤

在 CentOS 7 上安装 Docker 和 Docker Compose 的步骤如下&#xff1a; 1. 安装 Docker 1.1. 更新系统 首先&#xff0c;确保你的系统是最新版本&#xff1a; sudo yum update -y1.2. 安装必要的包 安装 yum-utils&#xff0c;这是管理 YUM 源的工具&#xff1a; sudo yu…

VBA代码解决方案第二十三讲 EXCEL中,如何删除工作表中的空白行

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

Pytorch--tensor.view()

在 PyTorch 中&#xff0c;tensor.view() 是一个常用的方法&#xff0c;用于改变张量&#xff08;Tensor&#xff09;的形状&#xff08;shape&#xff09;&#xff0c;但不会改变其数据本身。它类似于 NumPy 的 reshape()&#xff0c;但有一些关键区别。 1. 基本用法 import …

【机器学习】——机器学习思考总结

摘要 这篇文章深入探讨了机器学习中的数据相关问题&#xff0c;重点分析了神经网络&#xff08;DNN&#xff09;的学习机制&#xff0c;包括层级特征提取、非线性激活函数、反向传播和梯度下降等关键机制。同时&#xff0c;文章还讨论了数据集大小的标准、机器学习训练数据量的…

CoAP Shell 笔记

CoAP Shell 笔记 1. 概述 CoAP (Constrained Application Protocol) 是一种专为物联网 (IoT) 中资源受限的节点和网络设计的 RESTful Web 传输协议。CoAP Shell 是一个基于命令行的交互式工具&#xff0c;用于与支持 CoAP 的服务器进行交互。 2. 主要功能 协议支持&#xff…

【最新】探索CFD的未来:从OpenFOAM到深度学习,全面解析计算流体力学的顶级资源与前沿技术

计算流体力学(CFD)作为现代工程与科学研究的核心工具,正以前所未有的速度迈向智能化与多物理场耦合的新时代。本文全面梳理了在线学习CFD的顶级资源,涵盖了从传统数值模拟到深度学习驱动的物理信息模型的广泛领域,旨在为研究者、工程师和学生提供一站式参考指南。内容分为…

[leetcode]2492. 两个城市间路径的最小分数(并查集 排序后建边)

题目链接 题意 给定一个 n n n个点 m m m条边的无向图 每条边有边权 求1-n的路径中最小的边权是多少 每条路可以重复走 思路 把边按边权降序排序 用并查集维护连通性 遍历每条边 每次合并边的起点和终点 如果1和n联通 并且这条边在1和n的这个连通块中 就对ans取min Code…

Windows中IDEA2024.1的安装和使用

如果你也喜欢&#xff0c;记得一键三连啊 一、卸载 二、安装 三、注册 1、打开Crack文件&#xff0c;直接双击 “安装.bat”&#xff0c;否则可能安装会出错&#xff01;&#xff01; 2、选择【Activation code】&#xff08;不要关闭该界面继续后面的步骤&#xff09;。 …

【C#】构造协议帧通过串口下发

构造一个“协议帧”&#xff0c;打包串口/网络通信帧头部结构的核心部分 &#x1f527; 代码&#xff1a; List<byte> frame new List<byte>();// 1. 固定帧头 frame.AddRange(BitConverter.GetBytes(0x0130)); // 帧头 (4B) frame.AddRange(BitConverter…

04_SQL概述及DDL

文章目录 一、关于SQL1.1、SQL概述1.2、SQL分类 二、数据库操作2.1、查看数据库2.2、切换数据库2.3、查询当前使用的数据库2.4、创建数据库2.5、查看数据库创建信息2.6、修改数据库2.7、删除数据库 三、表的操作3.1、数据类型3.1.1、数值类型3.1.2、字符串类型3.1.3、日期时间类…

HCIA-数据通信datacom认证

文章目录 一、数据通信简介1.1 标准协议1.2 数据传输过程 二、通用路由平台VRP2.1 VRP简介2.2 命令行基础 三 、网络层协议IP3.1 数据封装3.2 数据包传输2.3 IP地址2.4 子网划分2.5 ICMP 四、IP路由基础4.1 路由概述4.2 路由表4.3 路由转发4.4 静态路由4.5 动态路由4.6 路由高级…

fast_pow(),c语言幂函数

double fast_pow(double a, int n) { double res 1.0; while (n > 0) { if (n & 1) res * a; // 如果当前位是1&#xff0c;累乘 a * a; // 平方 n >> 1; // 右移一位&#xff08;相当于 n / 2&…

OpenBMC:BmcWeb 处理http请求2 查找路由对象

OpenBMC:BmcWeb 处理http请求1 生成Request和AsyncResp对象_bmc web-CSDN博客 当接收到http请求,并且完成解析后,调用了App::handle处理请求 而App::handle又调用了router.handle(req, asyncResp);来处理请求 1.Router::handle void handle(const std::shared_ptr<Requ…

[Mac]利用hexo-theme-fluid美化个人博客

接上文,使用Fluid美化个人博客 文章目录 一、安装hexo-theme-fluid安装依赖指定主题创建「关于页」效果展示 二、修改个性化配置1. 修改网站设置2.修改文章路径显示3.体验分类和标签4.左上角博客名称修改5.修改背景图片6.修改关于界面 欢迎大家参观 一、安装hexo-theme-fluid 参…

深入理解二叉树、B树与B+树:原理、应用与实现

文章目录 引言一、二叉树&#xff1a;基础而强大的结构基本概念特性分析Java实现应用场景 二、B树&#xff1a;适合外存的多路平衡树基本概念关键特性查询流程示例Java简化实现典型应用 三、B树&#xff1a;数据库索引的首选核心改进优势分析范围查询示例Java简化实现实际应用 …

8.4考研408简单选择排序与堆排序知识点深度解析

考研408「简单选择排序与堆排序」知识点全解析 一、简单选择排序 1.1 定义与核心思想 简单选择排序(Selection Sort)是一种选择排序算法,其核心思想是: 每趟选择:从待排序序列中选择最小(或最大)的元素,与当前位置的元素交换。逐步构建有序序列:经过 n − 1 n-1

为什么需要开源成分分析?库博同源分析工具介绍

在当今的软件开发世界中&#xff0c;开源组件已经成为不可或缺的一部分。无论是加速开发进程&#xff0c;还是降低开发成本&#xff0c;开源组件都为我们带来了巨大的便利。然而&#xff0c;随着开源组件的广泛使用&#xff0c;安全风险也随之而来。你是否曾担心过&#xff0c;…

ros2 humble无法识别头文件<rclcpp/rclcpp.hpp>

首先在C/C配置中设置路径&#xff1a; 可以编辑文件.vscode/c_cpp_properties.json ${workspaceFolder}/**/opt/ros/humble/include/**编译配置 确保配置好了CMakeLists.txt文件。 colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDSON这样会在目录下生成compile_com…

常用的排序算法及对比

1. 选择排序&#xff08;Selection Sort&#xff09; 算法思想与理论推导 基本思想&#xff1a; 每次从待排序数组中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将它与当前序列的起始位置交换&#xff0c;逐步将整个数组排序。 推导过程&#xff1a; 设数组长…

Linux基础入门:从零开始掌握Linux命令行操作

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f388;有没有觉得电影里的黑客&#x1f412;酷毙了&#xff1f;他们只用键盘⌨就能搞定一切。今天&#xff0c;毛毛张要带你们体验这种快感&#x1f600;&…