在线商城项目EShop【ListView、adapter】

news2024/11/19 19:35:38

要求如下:

1、创建在线商城项目EShop;

2、修改布局文件activity_main.xml,使用LineaLayout和ListView创建商品列表UI;

3、创建列表项布局list_item.xml,设计UI用于显示商品图标、名称和价格信息;

4、创建GoodsAdapter类,用于显示列表中的数据;

5、在MainActivity中编写模拟的商品数据,把ListView对象关联到GoodsAdapter,实现商品数据的显示;

6、尝试使用SimpleAdapter和ArrayAdapter实现相同功能。

0.创建项目

根据要求创建一个新的项目,命名为:EShop,选择合适的最低 API 级别和其他项目配置。

1. 修改布局文件 activity_main.xml

res/layout 文件夹中找到 activity_main.xml,使用 LinearLayout 和 ListView 创建商品列表 UI。

如果不存在 res/layout,自行创建即可。

<?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="vertical">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

在这里插入图片描述

2. 创建列表项布局 list_item.xml

res/layout 文件夹中创建一个新的 XML 布局文件,命名为 list_item.xml,用于显示商品图标、名称和价格信息。

注意:这里如果没有图标,可以使用默认的:ic_launcher_foreground 和 “@drawable/ic_launcher_background”

<?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="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:src="@drawable/ic_launcher_foreground" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginLeft="16dp">

        <TextView
            android:id="@+id/productName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Product Name"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/productPrice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Price: $10.00"
            android:textSize="16sp" />
    </LinearLayout>
</LinearLayout>

3、创建 GoodsAdapter 类,用于显示列表中的数据:

创建一个Goods类来表示商品,包括名称和价格属性。

在src目录下创建Goods.kt文件:

data class Goods(val name: String, val price: Double)

在这里插入图片描述

创建一个GoodsAdapter类,用于将商品数据与ListView关联。

在src目录下创建GoodsAdapter.kt文件

package com.leo.eshop

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView

class GoodsAdapter(private val context: Context, private val goodsList: List<Goods>) : BaseAdapter() {

    override fun getCount(): Int {
        return goodsList.size
    }

    override fun getItem(position: Int): Any {
        return goodsList[position]
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.list_item, parent, false)

        val goods = getItem(position) as Goods

        val name:TextView = view.findViewById(R.id.productName)

        val price :TextView = view.findViewById(R.id.productPrice)

        name.text = goods.name
        price.text =  "Price: $${goods.price}"

        return view
    }
}

4.实现商品数据的显示

在MainActivity.kt文件中,编写模拟的商品数据,并将ListView对象关联到GoodsAdapter,实现商品数据的显示:

package com.leo.eshop

import android.os.Bundle
import android.widget.ListView
import androidx.activity.ComponentActivity

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val goodsList = listOf(
            Goods("Product 1", 10.99),
            Goods("Product 2", 19.99),
            Goods("Product 3", 5.99),
            // Add more items as needed
        )

        val adapter = GoodsAdapter(this,goodsList)
        val listView:ListView = findViewById(R.id.listView)
        listView.adapter = adapter

    }
}

这样,你就完成了一个简单的在线商城项目,使用了LinearLayout和ListView来设计商品列表UI,同时使用GoodsAdapter来处理数据和UI的关联.

实现效果

在这里插入图片描述

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

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

相关文章

IT监控制度,IT监控体系如何分层

IT监控系统是指监控和管理it服务管理的软件。它涵盖了监控管理、服务台管理、问题管理和变更管理&#xff0c;旨在帮助组织更有效的运营信息系统&#xff0c;提高运营事故的响应速度。  通过建立集中监控平台&#xff0c;IT监控系统与信息系统的融合可以完成统一的展示和管理…

ICMP差错包

ICMP报文分类 Type Code 描述 查询/差错 0-Echo响应 0 Echo响应报文 查询 3-目的不可达 0 目标网络不可达报文 差错 1 目标主机不可达报文 差错 2 目标协议不可达报文 差错 3 目标端口不可达报文 差错 4 要求分段并设置DF flag标志报文 差错 5 源路由…

【从0学习Solidity】 50. 多签钱包

【从0学习Solidity】50. 多签钱包 博主简介&#xff1a;不写代码没饭吃&#xff0c;一名全栈领域的创作者&#xff0c;专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构&#xff0c;分享一些项目实战经验以及前沿技术的见解。关注我们的主页&#xff0c;探索全栈…

Mac磁盘空间满了怎么办?Mac如何清理磁盘空间

你是不是发现你的Mac电脑存储越来越满&#xff0c;甚至操作系统本身就占了100多G的空间&#xff1f;这不仅影响了电脑的性能&#xff0c;而且也让你无法存储更多的重要文件和软件。别担心&#xff0c;今天这篇文章将告诉你如何清除多余的文件&#xff0c;让你的Mac重获新生。 一…

【kafka实战】01 3分钟在Linux上安装kafka

本节采用docker安装Kafka。采用的是bitnami的镜像。Bitnami是一个提供各种流行应用的Docker镜像和软件包的公司。采用docker的方式3分钟就可以把我们想安装的程序运行起来&#xff0c;不得不说真的很方便啊&#xff0c;好了&#xff0c;开搞。使用前提&#xff1a;Linux虚拟机&…

找不到msvcp110dll,无法继续执行代码,msvcp110dll丢失是什么意思

MSVCP110.dll是一个动态链接库文件&#xff0c;它是Microsoft Visual C 2012 Redistributable package的一部分。这个文件通常用于支持许多Microsoft Visual Studio 2012开发的应用程序。当您在运行某些程序时遇到“找不到msvcp110.dll”的错误时&#xff0c;这意味着您的计算机…

PHY6230低成本遥控灯控芯片国产蓝牙BLE5.2 2.4G SoC

高性价比的低功耗高性能蓝牙5.2系统级芯片&#xff0c;适用多种PC/手机外设连接场景。 高性能多模射频收发机&#xff1a; 通过硬件模块的充分复用实现高性能多模数字收发机。发射机&#xff0c;最大发射功率10dBm&#xff1b;BLE 1Mbps速率接收机灵敏度达到-96dBm&#xff1…

查准率(precision,也叫精确率)和查全率(recall,也叫召回率)

精确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值&#xff0c;用来评价结果的质量。其中精确率是检索出相关文档数与检索出的文档总数的比率&#xff0c;衡量的是检索系统的查准率&#xff1b;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率&…

【算法小课堂】滑动窗口

滑动窗口 基本概念&#xff1a; 滑动窗口本质是双指针算法的一种演变 本质上就是同向双指针&#xff0c;窗口的范围就是[left,right&#xff09; 滑动窗口大致可以分为两类 窗口大小不变的窗口大小变化的 滑动窗口遇到一些验证重复性的问题的时候可以用哈希表来优化 核心思想…

​旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一书作想象和世界一样宽广

​旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一书作想象和世界一样宽广

DAZ To UMA⭐二.设置DAZ导出的形态键 和 Daz贴图位置

文章目录 🟧 形态键介绍及在Unity3D中的用途1️⃣ Daz中的形态键2️⃣ Blender 中的形态键3️⃣ 形态键在Unity中的作用🟩 设置DAZ导出的形态键1️⃣ 找到要导出的形态键名称2️⃣ 打开导出面板3️⃣ 设置导出规则举例 : 导出身体Morphs举例:导出嘴部Morphs🟦 获取模型纹…

uni-app 之 去掉顶部导航

uni-app 之 去掉顶部导航 uniapp怎么样去掉顶部导航 uniapp去掉顶部导航的方法&#xff1a; 1、去掉所有导航栏&#xff1b; 2、单一页面去掉顶部导航栏。 image.png uniapp去掉顶部导航的方法&#xff1a; 1、去掉所有导航栏 "globalStyle": {"navigationBar…

个人电脑怎么搭建服务器 花生壳内网穿透 设置路由器虚拟服务器

在个人电脑上搭建服务器并使用花生壳进行内网穿透&#xff0c;以及在路由器上设置虚拟服务器&#xff0c;需要一些步骤&#xff1a; 内网穿透设置&#xff1a; 配置内网穿透&#xff0c;选择服务器软件的端口号&#xff0c;然后将其映射到您的服务器的内部IP地址和端口号。这将…

web信息收集

1.绕过cdn方法 2.搜索引擎语法 3.whois查询 4.端口探查 5.网站架构 6.其他 7.网站部署结构

Unity3D 检测鼠标位置的Sprite像素颜色

思路 获取鼠标所在屏幕坐标(Vector2)通过相机ScreenToWorldPoint(Vector3)转为世界坐标 (注意Vector3的z是距离相机的距离&#xff0c;相机需要正交)通过SpriteRenderer访问边界Bounds通过Bounds.Contain检测世界坐标是否在SpriteBounds内通过比例计算来确定在Sprite内的UV坐标…

企业sdwan组网要求:企业使用SD-WAN组网时有哪些要求?

在当今信息时代&#xff0c;企业对于网络的稳定性和高效性要求越来越高。SD-WAN(软件定义广域网)作为 一种新兴的网络技术&#xff0c;为企业提供了更加灵活、可靠和安全的广域网解决方案。在组建企业SD- WAN网络时&#xff0c;有一些关键要求需要考虑。 1. 高可用性&#xff…

全球首发搭载“舱驾一体”的智能座舱,诺博汽车如何引领未来出行?

智能座舱升级战已经全面打响。 一方面&#xff0c;智能座舱已经进入了3.0时代&#xff0c;车企对于差异化要求越来越高&#xff0c;如何进一步提升单一功能体验并进行深度融合&#xff0c;已经成为了智能座舱市场比拼的重点。 另一方面&#xff0c;在5G、车联网、大数据、人工…

Web安全扫描工具:Appscan安装和使用,无偿分享安装包与教程

Appscan 1、简介2、具体使用规则1、常用界面2、工作原理3、设置小技巧 3、实例扫描1、验证码绕过2、越权扫描3、手动绕过验证码扫描 1、简介 AppScan是一款商业化的web安全扫描工具&#xff0c;web扫描领域十分受欢迎 点击此处&#xff0c;先领取资料再阅读&#xff0c;附安装…

LPA*算法图文详解

之前我们看过了A* 算法&#xff0c;知道了A* 算法的基本原理&#xff0c;但是A* 算法的缺陷也很明显&#xff1a;它是离线的路径规划算法&#xff0c;只能一次规划出路径&#xff0c;但是后面路径被改变的话就无法生效了。针对这个问题&#xff0c;人们研究出了D* 算法。D* 算法…

ORAS轻松地在 OCI 注册表中分发工件

什么是ORAS? 词汇大全 ORAS 实际上是使用 OCI Artifacts 的工具。它将媒体类型视为难题的关键部分。容器镜像永远不会被认为是有问题的工件。ORAS 提供 CLI 和客户端库来跨 OCI 兼容的注册表分发工件。 ORAS的特点 ORAS是如何运作的? 能够跨OCI兼容的注册表或OCI图像布局分…