实现类似微信通讯录对人进行a-z人名首字母分组效果。
1.
在data1中加入groupL字段(字段名随意),字段内容是服务端遍历进去的该条数据人名的首字母。
<!--[if !supportLists]-->2.<!--[endif]-->新建一个data2,groupName就是a-z和#,最多是27条数据。
3.list2设置过滤器filter属性 $row.val(‘groupL’) == val(‘groupName’) ,过滤出list2(即data1)的groupL字段与list1(即data2)中groupName相同的字段。
<!--[if !supportLists]-->4.<!--[endif]-->后台代码
/**
* 查询结果转换为.w文件能读取的jsondata格式
* */
public static JSONObject toJSON(Integer limit,Integer offset,List<Map<String, Object>> list){
//fellowbookList = this.userService.searchThinkFellowbookList(this.param);
//声明列名
String[] column = {"user_id","real_name","loginname","phone_number","token_id","ente_id","ente_name","groupL"};
//JSONObject json = new JSONObject();
//json 包括查出的数据jsTable 和 首字母集合groupN
JSONObject jsTable = new JSONObject();
//List groupN = new ArrayList();
//第一部分
// "@type" - 类型标识,"table"表明这个JSON是一个table结构的数据
jsTable.put("@type", "table");
//第二部分 // "userdata" - table的元信息
JSONObject jsUserData = new JSONObject();
jsUserData.put("idColumnName", "user_id");//ID列的名称
jsUserData.put("idColumnType", "String");//ID列的数据类型
/**********可以在下面列定义中包含包含ID列,并忽略ID列定义**********/
// "relationAlias" - 列名,以逗号分隔
String relationAlias = "";
String relationTypes = "";
for(int i = 0 ;i<column.length;i++){
relationAlias += column[i]+",";//+","+column[1]+","+column[2]+","+column[3];
relationTypes += "String,";
}
relationAlias = relationAlias.substring(0,relationAlias.length()-1);
relationTypes = relationTypes.substring(0,relationTypes.length()-1);
jsUserData.put("relationAlias", relationAlias);
// "relationTypes" - 列数据类型,与上面的列名对应,
// 支持的类型有String、Integer、Long、Float、Double、Decimal、Boolean、Date、Time、DateTime
jsUserData.put("relationTypes", relationTypes);
// "sys.count" - 总行数,用于分页的页数计算,仅当返回第一页数据(offset==0)时需要返回总行数
int count = list.size();
jsUserData.put("sys.count", count);
//第三部分 // "rows" - 行数据数组
JSONArray jsRows = new JSONArray();
// 第一行数据,每一行数据都是一个JSON结构
//分页
if(limit !=null && offset!=null){
int a = count-offset;
if(a>=limit){
count = limit+offset;
}else{
count = a+offset;
}
}else{
offset = 0;
}
for(int i=0;i<count;i++){
Map<String,Object> userMap = list.get(i);
if(userMap==null){
break;
}
JSONObject jsRow = new JSONObject();
JSONObject rowValue = new JSONObject();
for(int j=0;j<column.length;j++){
//如果值没有变化,则执行
rowValue = new JSONObject();
String columnvalue = "";
if("groupL".equals(column[j])){
columnvalue = ChineseToPinYin.getPinYinHeadChar(userMap.get("real_name").toString()).substring(0,1);
System.out.println("人名首字母:"+columnvalue);
//①构造一个模式.
Pattern p=Pattern.compile("[^a-z]");
//②建造一个匹配器
Matcher m = p.matcher(columnvalue);
//③进行判断,得到结果
boolean b = m.matches();
if(b){
columnvalue = "#";
}
//groupN.add(columnvalue);
}else{
if("".equals(userMap.get(column[j]))||userMap.get(column[j])==null){
columnvalue = "";
}else{
columnvalue=userMap.get(column[j]).toString();
}
}
rowValue.put("value", columnvalue);
jsRow.put(column[j], rowValue);
System.out.println("列名+value值:"+column[j]+",value:"+columnvalue);
}
//rowValue = new JSONObject();
//rowValue.put("recordState", "none");
//jsRow.put("userdata", rowValue);
System.out.println("jsRow:"+jsRow);
jsRows.add(jsRow);
}
System.out.println("jsRows:"+jsRows);
jsTable.put("userdata", jsUserData);
jsTable.put("rows", jsRows);
System.out.println("jsTable:"+jsTable);
//json.put("jsTable", jsTable);
//json.put("groupN", groupN)
return jsTable;
}
5.效果(没有数据的字母隐藏待改进,只实现基本功能)
********更新2:实现右侧字母列表点击跳转到对应字母*********
6.加入 右侧字母列表
js中加入this.keys:
var Model = function(){
this.callParent();
this.keys = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z' ,'#'];
};
源码中加入:(style中内容根据实际样式情况随意写)
<div class="x-key-index" align="right" xid="x-key-index" style="z-index:5;position:relative;float:right;width:3%;">
<div class="info" />
<ul data-bind="foreach: keys" style="text-align:center;">
<li class="x-key-item" data-bind="text:$object" dir="ltr" style="font-size:small;"/>
</ul>
</div>
7. 主list1中 的output 编辑其源码
<div component="$UI/system/components/justep/output/output" class="x-output" xid="output4" data-bind="attr:{id:val('groupName')}" bind-ref="ref('groupName')"></div>
加入data-bind="attr:{id:val('groupName')}" 动态设置id属性为当前遍历的字母(如‘a’),用于后边a标签href定位,组件不能支持直接写id。
8.加入组件a标签(随意位置,不让他显示只为后边做click事件)
<a xid="a1" href="#"></a>
9.为右侧边栏li标签设置click事件
Model.prototype.li3Click = function(event){
var self = this;
var data2 = self.comp('data2');
var row = event.bindingContext.$object;/*获得当前点击li标签的字母*/
var rows = data2.find(['groupName'], [row]);
if(rows.length>0){/*如果数据库有该字母则为a标签赋值并触发click事件*/
var togroup = this.getElementByXid("a1");
togroup.setAttribute("href","#"+row);
togroup.click();
}
};
***************目前还存在的问题****************
右侧边栏的字母可能会超过手机屏幕的长度 ,造成a-#显示不全
相关推荐
android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android ...
总的来说,实现“Android-仿微信通讯录的实现联系人按字母分组显示右侧添加快速索引条”涉及到Android界面设计、数据结构、排序算法以及事件监听等多个知识点,是一个综合性的开发任务。通过这样的实践,开发者可以...
一、效果:我们看到很多软件的通讯录在右侧都有一个字母索引功能,像微信,小米通讯录,QQ,还有美团选择地区等等。这里我截了一张美团选择城市的图片来看看; 我们今天就来实现图片中右侧模块的索引功能,包括触摸...
在Android应用开发中,创建一个类似手机联系人应用的界面是一项常见的任务,其中包括对数据进行字母排序并实现字母索引定位的功能。这个功能允许用户快速浏览和定位到以特定字母开头的数据项,提高用户体验。本篇...
本项目“自定义view——模仿微信通讯录实现按字母快速查看(a-z)”正是一个很好的实例,展示了如何创建一个类似微信通讯录的快速查找功能。下面将详细介绍这个项目中的关键知识点。 1. 自定义View基础: 在Android...
这个实例主要关注如何实现字母索引(A~Z)的拼音侧边栏检索功能,使得用户可以快速定位到联系人的姓氏。以下将详细介绍这一功能的实现步骤和关键技术点。 1. **数据结构设计** 首先,我们需要一个数据结构来存储...
基于Spring Boot和WxJava实现的微信企业号企业微信放置演示-源码.zip
微信小程序 外卖点餐 KFC-master (源代码+截图)微信小程序 外卖点餐 KFC-master (源代码+截图)微信小程序 外卖点餐 KFC-master (源代码+截图)微信小程序 外卖点餐 KFC-master (源代码+截图)微信小程序 外卖...
【Android 仿微信通讯录 导航分组列表-上】使用ItemDecoration为RecyclerView打造带悬停头部的分组列表,修改bug版本.zip 【Android 仿微信通讯录 导航分组列表-上】使用ItemDecoration为RecyclerView打造带悬停头部...
它会在ListView的一侧显示一个垂直的滚动条,包含从A到Z的所有字母,用户可以点击对应的字母直接跳转到以该字母开头的项目列表。 要实现这个功能,我们需要以下几个关键步骤: 1. 数据准备:首先,你需要有一份...
为了实现字母索引,我们需要对联系人的名字进行处理,获取每个名字的首字母。这里提到了一个第三方库`pinyin4j-2.5.0.jar`,它是一个Java库,用于处理汉字拼音。我们可以使用这个库将汉字转换为拼音,然后提取首字母...
在这里,我们将深入探讨如何实现"(字母排序搜索)类似微信通讯录效果"。 首先,我们需要理解这个效果的基本组成部分。它主要包括两个关键部分:字母索引侧边栏和搜索功能。 1. 字母索引侧边栏: 这是通讯录效果...
在本文中,我们将深入探讨如何使用Vue.js框架和H5技术来创建一个仿微信通讯录功能,该功能包括按字母和汉字首字母分类排序、页面滚动、拼音首字母搜索以及处理特殊字符。这个项目的核心是根据JavaScript文件中的数据...
在Android开发中,这个设计需要开发者巧妙地处理数据结构和视图更新,以实现与微信通讯录类似的交互效果。 首先,我们来探讨如何实现这样一个功能。在描述中提到,由于字母排序的需求,需要将两个ListView合并为一...
在本项目中,“RecyclerView+index实现仿微信通讯录”旨在创建一个类似微信应用中的通讯录功能,它允许用户通过字母索引快速定位联系人。这个功能在大型数据集时特别有用,因为它提供了高效的滚动和查找体验。 首先...
这个功能通常会在一个ListView或RecyclerView中实现,通过一个可滑动的侧边栏来显示字母索引,用户点击某个字母时,会跳转到对应的联系人列表部分。在实现这个功能时,我们主要会涉及到以下几个关键知识点: 1. **...
在这个"微信小程序首字符排序-通讯录.rar"压缩包中,我们很显然是在探讨一个关于微信小程序如何实现通讯录功能,并且涉及到对通讯录进行首字符排序的问题。下面我们将深入讲解这一主题。 首先,我们需要理解微信小...
在安卓开发中,为了方便用户快速查找和浏览大量数据,通常会采用类似微信的A-Z字母排序索引功能。这个功能允许用户通过点击字母表快速定位到特定姓氏或名称的条目,提高用户体验。本资源"安卓A-Z字母排序索引相关-...
一键复制微信号,适用web端,移动端,微信端,亲测有效,直接下载直接上手,很方便使用,分享给大家。移动端复制微信代码-跳转微信代码-微信复制代码-点击复制微信号。