当前位置: 首页 > news >正文

Android对象封装及按汉语拼音排序

项目中用到对私信联系人排序,因为从服务器获取到的ArrayList联系人信息包括姓名,心情,头像等,所以根据姓名排序后还需要考虑跟心情,头像等的对应。

有两种思路:

1. 把联系人信息封装成一个类,对联系人对象根据姓名排序,用到头像等信息的时候,用get方法获取。

2. 从服务器获取到的ArrayList拆分后,在姓名上加上id,排序之后根据id查找对应的其他信息。

我采用的是第一种方法,具体实现如下:

联系人类:

	/**
	 * 联系人对象
	 * 
	 */
	public class Contact {
		String nickName;
		String letter;
		String headUrl;

		public Contact(int uId, String nickName, String letter, String headUrl) {
			this.nickName = nickName;
			this.letter = letter;
			this.headUrl = headUrl;
		}

		public String getNickName() {
			return nickName;
		}

		public void setNickName() {
			this.nickName = nickName;
		}

		public String getLetter() {
			return letter;
		}

		public void setLetter() {
			this.letter = letter;
		}

		public String getHeadUrl() {
			return headUrl;
		}

		public void setHeadUrl() {
			this.headUrl = headUrl;
		}
	}

  MyAdapter类:显示联系人信息使用ListView,需要重写BaceAdapter类

 // 排序(实现了中英文混排)
		PinyinComparator comparator = new PinyinComparator();
		Collections.sort(mContactList, comparator);

  联系人姓名可能包括大写字母,小写字母,汉字,特殊字符,这里需要统一处理成汉语拼音

public class PinyinComparator implements Comparator {
		/**
		 * 比较两个字符串
		 */
		@Override
		public int compare(Object o1, Object o2) {
			Contact contact1 = (Contact) o1;
			Contact contact2 = (Contact) o2;
			String str1 = getPingYin(contact1.getNickName());
			String str2 = getPingYin(contact2.getNickName());
			int flag = str1.compareTo(str2);
			return flag;
		}

		/**
		 * 将字符串中的中文转化为拼音,其他字符不变
		 * 
		 * @param inputString
		 * @return
		 */
		private String getPingYin(String inputString) {
			HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
			format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
			format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
			format.setVCharType(HanyuPinyinVCharType.WITH_V);

			char[] input = inputString.trim().toCharArray();// 把字符串转化成字符数组
			String output = "";

			try {
				for (int i = 0; i < input.length; i++) {
					// \\u4E00是unicode编码,判断是不是中文
					if (java.lang.Character.toString(input[i]).matches(
							"[\\u4E00-\\u9FA5]+")) {
						// 将汉语拼音的全拼存到temp数组
						String[] temp = PinyinHelper.toHanyuPinyinStringArray(
								input[i], format);
						// 取拼音的第一个读音
						output += temp[0];
					}
					// 大写字母转化成小写字母
					else if (input[i] > 'A' && input[i] < 'Z') {
						output += java.lang.Character.toString(input[i]);
						output = output.toLowerCase();
					}
					output += java.lang.Character.toString(input[i]);
				}
			} catch (Exception e) {
				Log.e("Exception", e.toString());
			}
			return output;
		}
	}

 ContactActivity类:

在Activity中定义存放数据的List,并初始化:

private List contactList;// 把联系人信息封装成对象,放到List中,传递给适配器
contactList = new ArrayList();
private MyContactAdapter mContactAdapter;// 联系人适配器
private ListView mListViewContact;// 联系人列表

初始化控件:

mListViewContact = (ListView)findViewById(R.id.listview_contact);

 封装对象:

// 把联系人信息封装成对象
contactList.add(new Contact(friendId, friendname,letter, friendhead));

  传递数据:

mContactAdapter = new MyrContactAdapter(this, contactList);
mListViewContact.setAdapter(mContactAdapter);

  

参考:http://jiake.iteye.com/blog/207038

转载于:https://www.cnblogs.com/cc-Cheng/archive/2012/10/13/2721876.html

相关文章:

  • 虚拟目录
  • Tomcat StringManager阅读学习 -我们到底能走多远系列(10)
  • robots协议
  • 使用ManageEngine NetFlow Analyzer监控netflow
  • 一个超棒的帮助你了解科技公司如何盈利的网站 - rcs.seerinteractive.com
  • 选IDC需注意五点 服务器托管的综合优势
  • 英语还是很有用的
  • ORACLE数据库从11.2.0.1.0upgrade to 11.2.0.3.0
  • H264 I帧 P帧
  • centos关机与重启命令详解
  • ORACLE 10g 下载地址列表
  • Eclipse 4.2 性能遭开发者吐槽
  • 陶哲轩实分析 引理 7.1.13 证明
  • 基于异常的检测技术
  • 继续探究HTML与CSS:@import CSS影响网页性能 (转)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【RocksDB】TransactionDB源码分析
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Angular数据绑定机制
  • Gradle 5.0 正式版发布
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JS字符串转数字方法总结
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • oschina
  • webpack4 一点通
  • 浮动相关
  • 关于使用markdown的方法(引自CSDN教程)
  • 来,膜拜下android roadmap,强大的执行力
  • 理解在java “”i=i++;”所发生的事情
  • 小试R空间处理新库sf
  • 最近的计划
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $ git push -u origin master 推送到远程库出错
  • $().each和$.each的区别
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (java)关于Thread的挂起和恢复
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (转)jdk与jre的区别
  • (转)visual stdio 书签功能介绍
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET Core 项目指定SDK版本
  • .Net mvc总结
  • .NET关于 跳过SSL中遇到的问题
  • .net生成的类,跨工程调用显示注释
  • ??myeclipse+tomcat
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [51nod1610]路径计数
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [codeforces]Checkpoints