首页 > 其他分享 >ArkTS水果排行榜【代码可执行】

ArkTS水果排行榜【代码可执行】

时间:2024-01-18 17:59:12浏览次数:28  
标签:index ArkTS 排行榜 代码 ets width 组件 new FruitDataModel

 

# ArkTS 水果排行榜

> 代码可执行
> 分为五个文件

> 1.FruitDataModel.ets 定义app中需要的水果模型

> 2.TitleComponent.ets 定义Title组件

> 3.TableHeaderComponent.ets 定义表头组件

> 4.ItemComponent.ets 定义列表项的子组件

>5.Index.ets UI入口组件

 

FruitDataModel.ets文件 定义app中需要的水果模型

/**
 * Models 水果对象
 */

export class FruitDataModel {
  private name:string
  private vote:string
  private id:string

  constructor(id:string, name:string, vote:string) {
    this.id = id
    this.name = name
    this.vote = vote
  }

}

 

TitleComponent.ets文件 定义Title组件

/**
 * TitleComponent Title组件
 */
import AppContext from '@ohos.app.ability.common'
@Component
export struct TitleComponent {

  @Link
  isRefreshData: boolean // 定义一个共享变量,是否刷新数据
  @State
  title: string = '水果排行榜' // 定义一个标题状态变量

  build() {
    Row() {
      // 分为两部分
      // 第一部分:又由两部分组成。1、返回图标。2、标题
      Row() {
        Image($r('app.media.ic_back')) // 返回按钮图片
          .height(21)
          .width(21)
          .margin({right: 18})
          .onClick(()=>{
            // 退出整个APP
            let context = getContext(this) as AppContext.UIAbilityContext // 获得上下文对象
            context.terminateSelf() // 关闭当前组件(退出)
          })
        Text(this.title)
          .fontSize('30.00fp')
      }
      .width('50%')
      .height('100%')
      .justifyContent(FlexAlign.Start)

      // 第二部分
      Row() {
        Image($r('app.media.ic_loading')) // 刷新按钮图标
          .width(22)
          .height(22)
          .onClick(()=>{
            this.isRefreshData = !this.isRefreshData
          })
      }
      .width('50%')
      .height('100%')
      .justifyContent(FlexAlign.End)
    }
    .width('100%')
    .height(47)
    .padding({left:26, right: 26})
    .margin({top:10})
    .justifyContent(FlexAlign.SpaceAround) // 平均分布
  }
}

 

TableHeaderComponent.ets 定义表头组件

/**
 * 表头组件
 */

@Component
export struct TableHeaderComponent {

  paddingValue: Padding|Length = 0
  widthValue: Length = 0 // 表头组件所占用的宽度

  build() {
    Row() {
      Text('排名')
        .fontSize(16)
        .width('20%')
        .fontWeight(400)
        .fontColor('#989A9C')

      Text('种类')
        .fontSize(16)
        .width('50%')
        .fontWeight(400)
        .fontColor('#989A9C')

      Text('得票数')
        .fontSize(16)
        .width('30%')
        .fontWeight(400)
        .fontColor('#989A9C')
    }
    .width(this.widthValue)
    .padding(this.paddingValue)

  }
}

 

ItemComponent.ets 定义列表项的子组件

/**
 * 列表项的子组件
 */

@Component
export struct ItemComponent {

  private index: number
  private name: string
  private vote: string

  @State
  isChoice: boolean = false // 该行数据是否选中

  build() {
    Row() {
      // 三部分组成
      // 第一部分: 排名
      Column() {
        if (this.isCircleText()) { // 圆形的文本框
          this.CreateCircle(this.index)
        } else {
          Text(this.index.toString())
            .lineHeight(24)
            .textAlign(TextAlign.Center)
            .fontSize(16)
            .fontWeight(400)
            .width(24)
        }
      }
      .width('20%')
      .alignItems(HorizontalAlign.Start)

      // 第二部分:种类
      Text(this.name)
        .width('50%')
        .fontWeight(500)
        .fontSize(18)
        .fontColor(this.isChoice ? Color.Blue : '#182431')

      // 第三部分:得票数
      Text(this.vote)
        .width('30%')
        .fontSize(16)
        .fontWeight(400)
        .fontColor(this.isChoice ? Color.Blue : '#182431')
    }
    .width('100%')
    .height(48)
    .onClick(()=>{
      // 选中该行之后,颜色要变化
      this.isChoice = !this.isChoice
    })
  }

  @Builder // 构建函数
  CreateCircle(index: number) {
    Row() {
      Text(this.index.toString())
        .fontWeight(40)
        .fontSize(16)
        .fontColor(Color.White)
    }
    .justifyContent(FlexAlign.Center)
    .borderRadius(24)
    .size({width:24, height: 24})
    .backgroundColor(Color.Blue)
  }

  isCircleText(): boolean {
    // 判断排名 是否为前3名
    return this.index === 1|| this.index === 2 || this.index === 3
  }
}

 

Index.ets UI入口组件

/**
 * 入口UI
 */

import {FruitDataModel} from './FruitDataModel'
import {ItemComponent} from './ItemComponent'
import {TableHeaderComponent} from './TableHeaderComponent'
import {TitleComponent} from './TitleComponent'
@Entry
@Component
struct Index {

  @State dataSource1: FruitDataModel[] = [
    new FruitDataModel('1', '苹果', '12000'),
    new FruitDataModel('2', '葡萄', '10320'),
    new FruitDataModel('3', '西瓜', '9801'),
    new FruitDataModel('4', '香蕉', '8431'),
    new FruitDataModel('5', '菠萝', '7546'),
    new FruitDataModel('6', '榴莲', '7431'),
    new FruitDataModel('7', '红葡萄', '7187'),
    new FruitDataModel('8', '梨子', '7003'),
    new FruitDataModel('9', '杨桃', '6794'),
    new FruitDataModel('10', '番石榴', '6721')
  ]

  @State dataSource2: FruitDataModel[] = [
    new FruitDataModel('11', '西瓜', '8836'),
    new FruitDataModel('12', '苹果', '8521'),
    new FruitDataModel('13', '香蕉', '8431'),
    new FruitDataModel('14', '葡萄', '7909'),
    new FruitDataModel('15', '红葡萄', '7547'),
    new FruitDataModel('16', '梨子', '7433'),
    new FruitDataModel('17', '菠萝', '7186'),
    new FruitDataModel('18', '榴莲', '7023'),
    new FruitDataModel('19', '番石榴', '6794'),
    new FruitDataModel('20', '杨桃', '6721')
  ]

  @State
  isSwitchDataSource: boolean = true  // 是否切换数据源

  build() {
    Column() {
      // 分为三部分
      // 第一部分:标题组件
      TitleComponent({isRefreshData:$isSwitchDataSource, title: '水果排行榜'})  // Link组件必须家$符号
      // 第二部分:表头组件
      TableHeaderComponent({
        paddingValue: {
          left: 15,
          right: 15
        },
        widthValue: '92%'
      })
        .margin({
          top: 20,
          bottom: 15
        })
      // 第三部分:列表
      this.CreateArrayItemComponent()
    }
    .backgroundColor('#F1F3F5')
    .width('100%')
    .height('100%')
  }

  @Builder
  CreateArrayItemComponent(){
    // 构建一个列表
    Column() {
      List() {
        ForEach(this.isSwitchDataSource ? this.dataSource1 : this.dataSource2, // 根据状态的值来切换不同的数据源
          (item:FruitDataModel, index: number) => {
            // 构建列表项
            ListItem() {
              ItemComponent({
                index: index + 1,
                // @ts-ignore
                name: item.name,
                // @ts-ignore
                vote: item.vote
              })
            }
          })
      }
      .width('100%')
      .height('65%')
      .divider({strokeWidth: 1})
    }
    .padding({
      left: 15,
      right: 15
    })
    .width('92%')
    .borderRadius(20)
    .alignItems(HorizontalAlign.Center)
    .backgroundColor(Color.White)
  }
}

 

效果展示

 

来源B站公开视频:

华为大佬最新鸿蒙HarmonyOS4.0(鸿蒙4)开发应用从入门到实战视频教程

标签:index,ArkTS,排行榜,代码,ets,width,组件,new,FruitDataModel
From: https://www.cnblogs.com/zhzhang/p/17973067

相关文章

  • 波达方向估计(DOA)-Python代码实现
    https://mp.weixin.qq.com/s/fMGc8ziglySGKr1fY8Jvkw模拟一个由三根全向天线组成的阵列,然后使用数组来模拟到达阵列的信号。相邻天线之间距离为1/2波长(也称为“半波长间隔”)。将模拟发射机的信号以一定角度theta到达该阵列。另外在这个接收到的信号中添加噪声。importnumpy......
  • FastCGI访问PHP-FPM实现任意代码执行
    之前学习web的Nginx解析漏洞就看到了FastCGI协议,今天学习一下。顺便看看有什么漏洞可以复现Nginx解析漏洞Nginx接受用户的http请求后生成的cgi环境变量有一SCRIPIT_NAME和PATH_INFO比如想要请求/var/www/html/example.gif/.php那么/var/www/html/example.gif就是SCRIPT_NAME/.......
  • Unity3D代码混淆方案详解
    背景Unity引擎使用Mono运行时,而C#语言易受反编译影响,存在代码泄露风险。本文通过《QQ乐团》项目实践,提出一种适用于Unity引擎的代码混淆方案,以保护代码逻辑。 引言在Unity引擎下,为了防止代码被轻易反编译,需要采取相应的保护措施。本文将分享一种基于实践经验的可行方案,希望......
  • 使用日志类库log4net.dll出现代码loginfo.IsInfoEnabled等于false的解决办(转)
    按语:   工程进行了裁剪,发现原来的日志功能失效了,调试时发现loginfo.IsInfoEnabled一直为false。后参考下面博客内容修改了log4net.config的文件属性修改,解决问题。===========================================================================在使用wpf开发日志方面......
  • 【OC】一份理解引用计数、runloop、子线程保活比较好的调试代码
    以下提供了一份ViewController.m的源代码,调试工程可以做成:AppDelegate.rootViewController=NavivationController(rootController:rootVC)然后再rootVC中点击屏幕,self.navigationControllerpush:viewController,然后就可以调试代码进行理解。#import"ViewController.h"......
  • 2024年1月中国数据库排行榜: OPOT 组合续写贺新年,达梦、腾讯发力迎升势
    2024年开局,墨天轮中国数据库流行度排行火热出炉,292个国产数据库齐聚榜单。整体来看,榜单前十整体变化不大,“O-P-O”格局稳固,前五位名次未发生变动。但新年伊始,各家数据库热度上升迅猛,分数差距也逐渐缩小,这微妙的波动折射出激烈的竞争态势,行业内涌动充分活力。本月排行榜解读文章......
  • (Python)每日代码||2024.1.18
    m=10a=10print(id(m))print(id(a))'''输出140713874176728140713874176728'''print()a=1b=2c=3d=a+bprint('a(1)\t'+str(id(a)))print('b(2)\t'+str(id(b)))print('c(3)\t'+str(id......
  • ArkTS基础知识
    【习题】ArkTS基础知识 及格分85/ 满分100 判断题1. 循环渲染ForEach可以从数据源中迭代获取数据,并为每个数组项创建相应的组件。正确(True)错误(False)回答正确2. @Link变量不能在组件内部进行初始化。正确(True)错误(False)回答正确单......
  • 6种Python代码生成exe工具
    6种Python代码生成exe工具auto-py-to-exe界面安装pipinstallauto-py-to-execmd命令框输入:auto-py-to-exe 1、pyinstallerpyinstaller是一个流行的Python打包工具,它可以将Python代码打包成独立的可执行文件。命令行中输入以下命令:pyinstalleryour_script.py这将......
  • 实现基于内容的电影推荐系统—代码实现
    引言昨日在读论文的过程中讲到,要实现一种基于内容的推荐算法,那么今天他来了。今天的算法实现基于Python的pandas数据处理第三方包和机器学习第三方包sklearn,关于sklearn的详细信息可以点击这里查看,关于pandas的详细信息可以点击这里查看代码实现importpandasaspd#导入数......