/** * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hx.hxchat.adapter; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.text.TextUtils; import android.util.Log; import android.util.SparseIntArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.SectionIndexer; import android.widget.TextView; import com.easemob.util.HanziToPinyin; import com.hx.hxchat.Constant; import com.hx.hxchat.domain.User; import com.hx.hxchat.utils.UserUtils; import com.mgw.member.R; import com.mgw.member.manager.BaseApplication; /** * 简单的好友Adapter实现 */ public class ContactAdapter extends ArrayAdapter<User> implements SectionIndexer { List<String> list; List<User> userList; // 用于过滤 List<User> copyUserList; private final LayoutInflater layoutInflater; private SparseIntArray positionOfSection; private SparseIntArray sectionOfPosition; private final int res; private int sLenth; public static String imagePath; // 头像路劲 public ContactAdapter(Context context, int resource, List<User> objects) { super(context, resource, objects); this.res = resource; this.userList = objects; copyUserList = new ArrayList<User>(); copyUserList.addAll(objects); layoutInflater = LayoutInflater.from(context); } // // @Override // public int getViewTypeCount() { // // return 2; // } // // @Override // public int getItemViewType(int position) { // // return position == 0 ? 0 : 1; // } private static class ViewHolder { /** 头像 */ ImageView avatar; /** 未读消息 */ TextView unreadMsgView; /** 消息 */ TextView nameTextview; /** 头标签 */ TextView tvHeader; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = layoutInflater.inflate(res, null); holder.avatar = (ImageView) convertView.findViewById(R.id.avatar); holder.unreadMsgView = (TextView) convertView.findViewById(R.id.unread_msg_number); holder.nameTextview = (TextView) convertView.findViewById(R.id.name); holder.tvHeader = (TextView) convertView.findViewById(R.id.header); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } User user = getItem(position); if (user != null) { Log.d("ContactAdapter", position + ""); // 设置nick,demo里不涉及到完整user,用username代替nick显示 String username = user.getNick(); SetHead(user); String header = user.getHeader(); // && !header.equals(firstHeader) String firstHeader = getItem(position).getHeader(); if (position == 0 || header != null && (position != 0 && !header.equals(getItem(position - 1).getHeader()))) { if ("".equals(header)) { holder.tvHeader.setVisibility(View.GONE); } else { holder.tvHeader.setVisibility(View.VISIBLE); holder.tvHeader.setText(header); } } else { holder.tvHeader.setVisibility(View.GONE); } // 显示申请与通知item if (username.equals("申请与通知")) { holder.nameTextview.setText("新的朋友"); holder.avatar.setImageResource(R.drawable.new_friends_icon); if (user.getUnreadMsgCount() > 0) { // int a = user.getUnreadMsgCount(); holder.unreadMsgView.setVisibility(View.VISIBLE); holder.unreadMsgView.setText(user.getUnreadMsgCount() + ""); } else { holder.unreadMsgView.setVisibility(View.INVISIBLE); } } else if (username.equals("群聊")) { // 群聊item holder.nameTextview.setText("群聊"); holder.avatar.setImageResource(R.drawable.groups_icon); } else { holder.nameTextview.setText( UserUtils.getCommentOrNick(user,true)); UserUtils.setUserAvatar(getContext(), user.getUsername(), holder.avatar);// 10655274 if (holder.unreadMsgView != null) holder.unreadMsgView.setVisibility(View.INVISIBLE); } } return convertView; } private void SetHead(User puser) { String username = puser.getUsername(); String headerName = null; if (!TextUtils.isEmpty(puser.getNick())) { headerName = puser.getNick(); } else { headerName = puser.getUsername(); } if (username.equals(Constant.NEW_FRIENDS_USERNAME)) { } if (username.equals(Constant.NEW_FRIENDS_USERNAME) || username.equals(Constant.GROUP_USERNAME)) { puser.setHeader(""); } else if (Character.isDigit(headerName.charAt(0))) { puser.setHeader("#"); } else { try { puser.setHeader(HanziToPinyin.getInstance().get(headerName.substring(0, 1)).get(0).target.substring(0, 1).toUpperCase()); } catch (Exception ex) { puser.setHeader("#"); } char header = puser.getHeader().toLowerCase().charAt(0); if (header < 'a' || header > 'z') { puser.setHeader("#"); } } } @Override public User getItem(int position) { // return position == 0 ? new User() : super.getItem(position - 1); return userList.get(position); } @Override public int getCount() { // 有搜索框,cout+1 return userList.size(); } @Override public int getPositionForSection(int section) { return positionOfSection.get(section); } @Override public int getSectionForPosition(int position) { return sectionOfPosition.get(position); } @Override public Object[] getSections() { positionOfSection = new SparseIntArray(); sectionOfPosition = new SparseIntArray(); int count = getCount(); List<String> list = new ArrayList<String>(); list.add(getContext().getString(R.string.search_header)); positionOfSection.put(0, 0); sectionOfPosition.put(0, 0); for (int i = 0; i < count; i++) { String letter = getItem(i).getHeader(); System.err.println("contactadapter getsection getHeader:" + letter + " name:" + getItem(i).getUsername()); int section = list.size() - 1; if (list.get(section) != null && !list.get(section).equals(letter)) { list.add(letter); section++; positionOfSection.put(section, i); } sectionOfPosition.put(i, section); } return list.toArray(new String[list.size()]); } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); copyUserList.clear(); copyUserList.addAll(userList); } }