HarmonyOS实战—实现相亲APP
简易版 相亲APP
- 实现如下效果:
- 如果喜欢就点击下面的“联系方式”,不喜欢就点击“下一个”
1. 布局实现
- 新建项目:
MakeFriendsApplication
- 把以下九个
girl
图片复制到media
文件夹下
- 有需要上面图片素材的小伙伴可以自取:https://www.aliyundrive.com/s/j59dy5redPR
- 当然也可以自己在网上找,图片信息如下:
- 可以在上面的实现看到布局是由:一个图片+三个文本+两个按钮 组成的
- 布局实现:
ability_main
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:alignment="center"
ohos:orientation="vertical">
<Image
ohos:id="$+id:img"
ohos:height="match_content"
ohos:width="match_content"
ohos:image_src="$media:girl1"/>
<Text
ohos:id="$+id:name"
ohos:height="50vp"
ohos:width="150vp"
ohos:text="姓名:王美花"
ohos:text_size="20fp"/>
<Text
ohos:id="$+id:age"
ohos:height="50vp"
ohos:width="150vp"
ohos:text="年龄:29"
ohos:text_size="20fp"/>
<Text
ohos:id="$+id:address"
ohos:height="50vp"
ohos:width="150vp"
ohos:text="地址:南京"
ohos:text_size="20fp"/>
<Button
ohos:id="$+id:next"
ohos:height="50vp"
ohos:width="150vp"
ohos:background_element="#92D050"
ohos:text="下一个"
ohos:text_size="20fp"
ohos:text_color="#FFFFFF"/>
<Button
ohos:id="$+id:get"
ohos:height="50vp"
ohos:width="150vp"
ohos:background_element="#92D050"
ohos:text="获取联系方式"
ohos:text_size="20fp"
ohos:text_color="#FFFFFF"
ohos:top_margin="10vp"/>
</DirectionalLayout>
- 运行:
2. 核心业务逻辑实现
- 先找到组件对象
- 业务:点击了按钮“下一个”就要修改上面的信息,能不能把上面的信息看作成一个整体的对象? 现在有9个相亲对象,点击“下一个”的时候,就会随机把一个相亲对象的信息去显示在上面。
- 创建一个Javabean类去描述女朋友信息,有了Javabean类后才能在代码中创建对象
- 在
domain
中新建类名为:GirlFriend
,在类中的属性有哪些? - 如:图片、姓名、地址、年龄都是GirlFriend类中的属性
- 在资源管理器中获取图片,发现
girl
图片是int
类型的
- 所以在JavaBean中
GirlFriend
类中图片类型使用int
类型
- 其他属性使用对应的类型
- 最后生成标准的JavaBean即可
package com.xdr630.makefriendsapplication.domain;
public class GirlFriend {
//照片
private int photoID;
//姓名
private String name;
//年龄
private int age;
//地址
private String address;
//空参 + 全参:alt + insert
public GirlFriend() {
}
public GirlFriend(int photoID, String name, int age, String address) {
this.photoID = photoID;
this.name = name;
this.age = age;
this.address = address;
}
public int getPhotoID() {
return photoID;
}
public void setPhotoID(int photoID) {
this.photoID = photoID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
- 创建好了Javabean,就可以创建一个集合装9个相亲的对象,使用集合来存储了,
ArrayList
,泛型就可以直接写创建好的GirlFriend
类
- 在以后学习了和服务器交互之后,这些数据都是从服务器获取的,就不是一个一个添加了
- 下面就是手动添加数据来源
- 创建一个女朋友对象(
new GirlFriend
)并添加到list
当中 - 为了方便,省的去查看Javabean中属性的排序,
Ctrl + P
就可以查看参数了
- 添加完成
9
个对象
- 接着给按钮添加点击事件,两个按钮都要添加,分别是“
next
”和“get
”按钮 - 实现本类中点击事件
- 当
next
按钮被点击后,就会执行本类中的onClick
方法
get
按钮同上也要添加单击事件
- 然后在
onClick
方法中判断点击是next
按钮 或get
按钮 - 因为在
onClick
方法中要用到按钮的对象,所以把按钮的对象提升为 成员变量 才能在onClick
方法中被访问的到,用到哪个就提哪个,这些组件都用的到,所以都提为成员变量。 - 在下面
onClick
方法当中,要从集合中获取girl
信息,所以集合也要提为成员变量
Random
对象也放在成员位置,表示在程序启动之后就创建了一个,如果放在onClick
方法中,当点击一次就创建一次,内存冗余。
MainAbilitySlice
package com.xdr630.makefriendsapplication.slice;
import com.xdr630.makefriendsapplication.ResourceTable;
import com.xdr630.makefriendsapplication.domain.GirlFriend;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Image;
import ohos.agp.components.Text;
import java.util.ArrayList;
import java.util.Random;
public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
Image img;
Text name;
Text age;
Text address;
Button next;
Button get;
ArrayList<girlfriend> list = new ArrayList<>();
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1.找到组件对象
img = (Image) findComponentById(ResourceTable.Id_img);
name = (Text) findComponentById(ResourceTable.Id_name);
age = (Text) findComponentById(ResourceTable.Id_age);
address = (Text) findComponentById(ResourceTable.Id_address);
next = (Button) findComponentById(ResourceTable.Id_next);
get = (Button) findComponentById(ResourceTable.Id_get);
//2.创建一个集合装9个相亲的对象
//添加9个对象
//在以后学习了和服务器交互之后,这些数据都是从服务器获取的
list.add(new GirlFriend(ResourceTable.Media_girl1,"王美花1",29,"南京"));
list.add(new GirlFriend(ResourceTable.Media_girl2,"王美花2",30,"上海"));
list.add(new GirlFriend(ResourceTable.Media_girl3,"王美花3",31,"武汉"));
list.add(new GirlFriend(ResourceTable.Media_girl4,"王美花4",28,"长沙"));
list.add(new GirlFriend(ResourceTable.Media_girl5,"王美花5",25,"南昌"));
list.add(new GirlFriend(ResourceTable.Media_girl6,"王美花6",26,"杭州"));
list.add(new GirlFriend(ResourceTable.Media_girl7,"王美花7",23,"深圳"));
list.add(new GirlFriend(ResourceTable.Media_girl8,"王美花8",22,"北京"));
list.add(new GirlFriend(ResourceTable.Media_girl9,"王美花9",24,"广州"));
//3.给按钮添加点击事件
next.setClickedListener(this);
get.setClickedListener(this);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
Random r = new Random();
@Override
public void onClick(Component component) {
if (component == next){
//点击的是下一个 --- 换一个girl的信息
//从集合中获取一个随机的girl的信息
//获取一个随机索引
int randomIndex = r.nextInt(list.size());
//通过随机索引获取随机girl信息
GirlFriend girlFriend = list.get(randomIndex);
//把随机出来的信息设置到界面当中
img.setImageAndDecodeBounds(girlFriend.getPhotoID());
name.setText("姓名:" + girlFriend.getName());
age.setText("年龄:" + girlFriend.getAge());
address.setText("地址:" + girlFriend.getAddress());
}else if (component == get){
//获取联系方式
//扩展:可以跳转到界面让用户充值界面,充值后才能看到girl信息
}
}
}
- 运行:
- 点击“下一个”
- 当点击“下一个”按钮时,信息也会随之一起获取的到,所以有需求的小伙伴可以扩展下,当点击“下一个”按钮时信息是隐藏的,只有当点击“获取联系方式”时才能显示出对应的信息,或也可以添加充值页面,当点击“获取联系方式”时,就跳转到充值页面,只有充值完后才能看到对应的信息。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Hango 开源解读:云原生网关实践,为何要选择 Envoy ?
网关是“镇守”互联网应用门户的关键流量代理软件。进入云原生时代,行业用户除了需要 API 网关提供请求代理、熔断限流、审计监控等常规能力外,更多的开始关注云原生兼容性(容器、服务网格等),支撑场景的多样性(七层负载均衡、Ingress、Serverless 网关等),以及更好的性能稳定性。网易在 2018 年选型云原生标准数据面软件 Envoy 构建了新一代 API 网关,满足了云原生场景需求,承担了网易百亿级互联网业务流量。本文从网易数帆开源云原生 API 网关 Hango 的选型入手,对云原生网关选型为何选择 Envoy 进行了较为全面的解读。 背景 Hango是由网易公司开源的一个基于Envoy构建的高性能、可扩展、功能丰富的云原生 API 网关。 Hango 提供请求代理、动态路由、负载均衡、限流、熔断、健康检查、安全防护等功能,可用于微服务网关、七层负载均衡、Kubernetes Ingress、Serverless 网关等多种应用场景。此外,通过 Hango 的 Rider 模块,用户可以自定义多语言插件进行能力扩展。 Hango 项目仓库:https://github.c...
-
下一篇
从源码角度解析线程池中顶层接口和抽象类
摘要:我们就来看看线程池中那些非常重要的接口和抽象类,深度分析下线程池中是如何将抽象这一思想运用的淋漓尽致的。 本文分享自华为云社区《【高并发】深度解析线程池中那些重要的顶层接口和抽象类》,作者:冰 河。 通过对线程池中接口和抽象类的分析,你会发现,整个线程池设计的是如此的优雅和强大,从线程池的代码设计中,我们学到的不只是代码而已!! 题外话:膜拜Java大神Doug Lea,Java中的并发包正是这位老爷子写的,他是这个世界上对Java影响力最大的一个人。 一、接口和抽象类总览 说起线程池中提供的重要的接口和抽象类,基本上就是如下图所示的接口和类。 接口与类的简单说明: Executor接口:这个接口也是整个线程池中最顶层的接口,提供了一个无返回值的提交任务的方法。 ExecutorService接口:派生自Executor接口,扩展了很过功能,例如关闭线程池,提交任务并返回结果数据、唤醒线程池中的任务等。 AbstractExecutorService抽象类:派生自ExecutorService接口,实现了几个非常实现的方法,供子类进行调用。 ScheduledExecutorSe...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7,CentOS8安装Elasticsearch6.8.6