news 2026/7/17 1:19:22

鸿蒙原生开发手记:徒步迹 - 路线搜索与筛选功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙原生开发手记:徒步迹 - 路线搜索与筛选功能

鸿蒙原生开发手记:徒步迹 - 路线搜索与筛选功能

实现多条件搜索和标签筛选


一、前言

搜索和筛选是列表页的核心交互。本文实现路线列表的搜索框实时搜索和难度标签筛选功能。


二、搜索框实现

@Component struct SearchBar { @State query: string = ''; @State isSearching: boolean = false; build() { Row() { TextInput({ placeholder: '搜索路线名称或地点', text: this.query, }) .layoutWeight(1) .backgroundColor(Color.Transparent) .fontSize(14) .onChange((value: string) => { this.query = value; this.onSearch(value); }); if (this.isSearching) { LoadingProgress().width(18).height(18).margin({ right: 12 }); } } .width('100%') .height(44) .backgroundColor('#FFF') .borderRadius(22) .padding({ left: 16 }); } onSearch(query: string): void { this.isSearching = true; // debounce 搜索 setTimeout(() => { AppStorage.setOrCreate('routeQuery', query); this.isSearching = false; }, 300); } }

三、筛选标签

@Component struct FilterTags { @State selectedTag: string = '全部'; private tags: string[] = ['全部', '简单', '中等', '困难']; build() { Row() { ForEach(this.tags, (tag: string) => { Text(tag) .fontSize(13) .fontColor(this.selectedTag === tag ? Color.White : '#666') .backgroundColor( this.selectedTag === tag ? '#4CAF50' : '#FFF' ) .borderRadius(16) .padding({ left: 16, right: 16, top: 6, bottom: 6 }) .margin({ right: 8 }) .onClick(() => { this.selectedTag = tag; AppStorage.setOrCreate('routeDifficulty', tag); }); }, (tag: string) => tag); } .padding({ left: 16, right: 16 }); } }

四、组合搜索与筛选

function filterRoutes( routes: HikingRoute[], query: string, difficulty: string ): HikingRoute[] { return routes.filter(route => { // 关键词匹配 const matchQuery = !query || route.name.includes(query) || route.description.includes(query) || route.tags.some(t => t.includes(query)); // 难度筛选 const matchDifficulty = difficulty === '全部' || route.difficulty === difficulty; return matchQuery && matchDifficulty; }); }

五、总结

搜索框结合筛选标签,让用户可以快速找到感兴趣的路线。实时搜索配合 debounce 优化,确保交互流畅。

下一篇文章实现路线详情页布局。


下一篇预告:鸿蒙原生开发手记:徒步迹 - 路线详情页布局实现

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 1:19:18

Win10降级Win7全攻略:驱动注入与BIOS设置详解

1. Win10降级Win7的必要性与准备工作在2023年的今天,仍然有不少用户希望将Windows 10系统降级回Windows 7。这种需求主要来自三类人群:老旧硬件用户(特别是2015年前生产的设备)、专业软件兼容性需求(如某些工业控制软件…

作者头像 李华
网站建设 2026/7/17 1:18:43

Windows 11 LTSC如何快速安装微软商店?3分钟终极解决方案

Windows 11 LTSC如何快速安装微软商店?3分钟终极解决方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 你是否在使用Windows 11 LTSC精简…

作者头像 李华
网站建设 2026/7/17 1:15:23

Android随笔-ANR

一、ANR 是什么 ANR(Application Not Responding,应用无响应)是 Android 系统的一种自我保护机制:当主线程(UI Thread)在规定时间内无法响应用户输入或系统事件时,系统会弹出"应用无响应&q…

作者头像 李华
网站建设 2026/7/17 1:12:47

Java发送HTTP GET请求的5种高效方法

在Java里头, 发送HTTP GET请求主要存在几种方式: 运用.、运用 、运用 库, 又或者运用Java 11当中引入的.http.。这些方式全都能够达成在Java里创建和发送HTTP GET请求的要求, 然而它们于易用性、功能性以及可维护性方面存有差别。在这些方法里头, .http. 于Java 11的时候被引进…

作者头像 李华