HarmonyOS 项目实战之通讯录(Java)

1 简介

通讯录demo主要分为联系人界面、设置紧急联系人、服务卡片3个模块,分为Java和JS两个版本,本篇主要讲解用尽可能的用Java去实现。

1.1 原型

感兴趣的小伙伴,可以自己根据原型效果自己尝试着去实现【通讯录demo简易原型】

1.2 场景示例

通过学习与练习本demo,可以延伸至以下场景

1.3 项目实战

《HarmonyOS 项目实战之通讯录Demo(JS)》

《HarmonyOS 项目实战之通讯录(Java)》

《HarmonyOS 项目实战之新闻头条(ArkUI-TS》

2 功能开发

2.1 联系人列表

2.1.1 实现效果

2.1.2 核心代码

参考:ListContainer-常用组件开发指导-Java UI框架-UI-开发-HarmonyOS应用开发

  • ListContainer设置StickyContactProvider适配器
  • HeaderDecor头部联动效果设置
  • ContactData数据处理相关类,sortContactData方法用于排序等数据处理
ContactData categoryData = ContactData.get(); 
    categoryData.sortContactData(); 
 
    contactList = (ListContainer) findComponentById(ResourceTable.Id_contactList); 
    Text headerText = (Text) findComponentById(ResourceTable.Id_sticky_text); 
    List<ContactBean> dataList = categoryData.getResultList(); 
 
    mStickyContactProvider = new StickyContactProvider(this, dataList); 
    contactList.setItemProvider(mStickyContactProvider); 
    HeaderDecor headerDecor = new HeaderDecor(contactList, headerText); 

sortContactData方法数据处理,排序,字母索引:

public void sortContactData() { 
    List<ContactBean> mContactList = new ArrayList<>(); 
    Map<String, String> map = new HashMap<>(); 
 
    for (ContactBean contactBean : mContactBeans) { 
        String pinyin = Utils.getPingYin(contactBean.getName()); 
        map.put(pinyin, contactBean.getName()); 
        contactBean.setNamepy(pinyin); 
        mContactList.add(contactBean); 
    } 
    mContactList.sort(new ContactComparator()); 
    characterList = new ArrayList<>(); 
    resultList = new ArrayList<>(); 
    for (ContactBean contactBean : mContactList) { 
        String namepy = contactBean.getNamepy(); 
        String character = (namepy.charAt(0) + "").toUpperCase(Locale.ENGLISH); 
        if (!characterList.contains(character)) { 
            if (character.hashCode() >= "A".hashCode() && character.hashCode() <= "Z".hashCode()) { // 是字母 
                characterList.add(character); 
                resultList.add(new ContactBean(character, ContactBean.ITEM_TYPE.ITEM_TYPE_CHARACTER.ordinal())); 
            } else { 
                if (!characterList.contains("#")) { 
                    characterList.add("#"); 
                    resultList.add(new ContactBean("#", ContactBean.ITEM_TYPE.ITEM_TYPE_CHARACTER.ordinal())); 
                } 
            } 
        } 
 
        resultList.add(new ContactBean(contactBean.getName(), contactBean.getTelephone(), map.get(namepy), ContactBean.ITEM_TYPE.ITEM_TYPE_CONTACT.ordinal())); 
    } 
} 

2.2 数据的增删改查

2.2.1 实现效果

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值