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

posted @ 2012-10-13 09:21  时光独白  阅读(2182)  评论(0编辑  收藏  举报