EP 18 Search and SearchBar design in TopStore App

Hello, 各位 iT邦帮忙 的粉丝们大家好~~~

本篇是 Re: 从零开始用 Xamarin 技术来复刻过去开发的一个 App: TopStore 系列文的 EP18。

在目前 PeoplePage 呈现联络人列表中没有实作搜寻的功能,而当联络人多的时候可能就会需要有这样的功能实作,所以本篇就来在 PeoplePage 当中的 ListView 的上方呈现中实作 SearchBar 的 UI 元件,并且完成最基本的针对联络人姓名搜寻功能。

开始罗~~~


首先打开找到 PeoplePage 的 ListView 标记。
ListView 标记

由於版面的 RootLayout 当初是用 StackLayout,就直接在该 ListView 标记上方撰写 SearchBar 的标记,并设定其 Placeholder 的文字。
SearchBar 标记

接下来继续在 SearchBar 当中设定 SearchCommand 跟 SearchCommandParameter 的 Binding(系结) 对象。
SearchBar 中设定 SearchCommand 跟 SearchCommandParamete 属性

而在这边也增加一个 TextTransform 的属性设定 为 Lowercase,让使用者输入的文字就算是英文大写也会变英文的小写,以防止搜寻时有大小写比对的问题发生(不做此设定也可以,但注意後面的 SearchCommand 实作时就要转换 keyword 的参数值为小写来比对)。
SearchBar 中设定 TextTransform 属性

後续动作应该不用多说,应该也猜的到要到 PeoplePageViewModel 当中撰写对应应有的 SearchCommand 设计。

不过,要注意的是此 SearchCommand 需有设计引数 keyword 来供使用者在 SearchBar 中输入的文字(Text 属性)当参数资料输入。
SearchCommand 设计 1

SearchCommand 实际的功能程序码,大体上就针对 MockData 中的 People ,利用了 Linq 语句处理条件的部分(请先在 PeoplePageViewModel 当中加入 using System.Linq 的命名空间引用),并且针对查询不到资料时作了一个 Alert 的 UI 显示。
SearchCommand 设计 2

若前面的 SearchBar 没有设定 TextTransform 的属性的话,请记得在比对时 keyword 也要转换成小写文字,以利使用者输入的文字能统一大小写比对查询。
(除非真的要做精准文字比对,那就可以不管这问题了)

而在双平台 (iOS、Android) 执行搜寻的效果如下:

在 PeoplePage 的 SearchBar 准备输入文字"。
搜寻的效果 1

在 SearchBar 输入文字,例如: "j",并按下虚拟键盘中的 "搜寻" 键。
搜寻的效果 2

然後 ListView 的内容变换成搜寻後的结果。
搜寻的效果 3

透过 SearchBar 完成基本的 Search 效果後,则要再处理一些 SearchBar 本身设计时的 UI 问题才行...

让我们先回到 PeoplePaeg.xaml,针对 SearchBar 的标记增加 TextChanged 的事件注册。
TextChanged 的事件注册

并在 PeoplePage.xaml.cs 当中找到对应的事情处理常式的程序码。
SeachBar 的 TextChanged 事件处理常式

撰写事情处理常式内部要执行的程序码。
SeachBar 的 TextChanged 事件处理常式要执行的程序码

这主要是为了要处理使用者操作的过程当中,可能会在搜寻完成後透过 SearchBar 的清除按钮时,将 SearchBar 的所有文字时删除,能顺利恢复到能观看所有联络人的状态。

修正後在双平台 (iOS、Android) 执行搜寻的效果如下:

在 SearchBar 输入文字,例如: "j",并按下虚拟键盘中的 "搜寻" 键。
搜寻文字清除後的效果 1

按下虚拟键盘中的 "搜寻" 键,结果显示正确。
搜寻文字清除後的效果 2

清除 SearchBar 的文字,ListView 恢复显示所有联络人资讯。
搜寻文字清除後的效果 3

以上本 EP18 的介绍完成~~~

蹦的掰!


<<:  RestTemplate实作(一)(Day11)

>>:  30天零负担轻松学会制作APP介面及设计【DAY 17】

误打误撞跳到网路组

前情提要 找到指导教授後发生意外结果我又必须要重新找老师啦 QQ 进入正题 之前的故事有提到,我大学...

每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day28

tags: ItIron2021 Javascript 前言 昨天我们跑了一个本系列最~简单的题目之...

Day 4 - 用 canvas 复刻 小画家 填入色彩, 橡皮擦

填满色彩 在点击画布时,使用 fillStyle 先填上颜色,再覆盖整个画布 /** * 滑鼠点下画...

Day28:错误处理

讲一个经典案例除以0,首先创造一个DivideByZeroEXception类别继承runtime_...

当你发现自己和大众站在一边的时候,反而该停下来反思一下。

当你发现自己和大众站在一边的时候,反而该停下来反思一下。 Whenever you find you...