package cn.rongcloud.im.ui.adapter; import android.content.Context; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.SectionIndexer; import android.widget.TextView; import java.util.List; import cn.rongcloud.im.App; import cn.rongcloud.im.R; import cn.rongcloud.im.SealUserInfoManager; import cn.rongcloud.im.db.Friend; import cn.rongcloud.im.server.widget.SelectableRoundedImageView; import io.rong.imageloader.core.ImageLoader; /** * Created by AMing on 16/1/14. * Company RongCloud */ public class FriendListAdapter extends BaseAdapter implements SectionIndexer { private Context context; private List<Friend> list; public FriendListAdapter(Context context, List<Friend> list) { this.context = context; this.list = list; } /** * 传入新的数据 刷新UI的方法 */ public void updateListView(List<Friend> list) { this.list = list; notifyDataSetChanged(); } @Override public int getCount() { if (list != null) return list.size(); return 0; } @Override public Object getItem(int position) { if (list == null) return null; if (position >= list.size()) return null; return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; final Friend mContent = list.get(position); if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.friend_item, parent, false); viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.friendname); viewHolder.tvLetter = (TextView) convertView.findViewById(R.id.catalog); viewHolder.mImageView = (SelectableRoundedImageView) convertView.findViewById(R.id.frienduri); viewHolder.tvUserId = (TextView) convertView.findViewById(R.id.friend_id); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } //根据position获取分类的首字母的Char ascii值 int section = getSectionForPosition(position); //如果当前位置等于该分类首字母的Char的位置 ,则认为是第一次出现 if (position == getPositionForSection(section)) { viewHolder.tvLetter.setVisibility(View.VISIBLE); String letterFirst = mContent.getLetters(); if(!TextUtils.isEmpty(letterFirst)){ letterFirst = String.valueOf(letterFirst.toUpperCase().charAt(0)); } viewHolder.tvLetter.setText(letterFirst); } else { viewHolder.tvLetter.setVisibility(View.GONE); } if (mContent.isExitsDisplayName()) { viewHolder.tvTitle.setText(this.list.get(position).getDisplayName()); } else { viewHolder.tvTitle.setText(this.list.get(position).getName()); } String portraitUri = SealUserInfoManager.getInstance().getPortraitUri(list.get(position)); ImageLoader.getInstance().displayImage(portraitUri, viewHolder.mImageView, App.getOptions()); if (context.getSharedPreferences("config", Context.MODE_PRIVATE).getBoolean("isDebug", false)) { viewHolder.tvUserId.setVisibility(View.VISIBLE); viewHolder.tvUserId.setText(list.get(position).getUserId()); } return convertView; } @Override public Object[] getSections() { return new Object[0]; } @Override public int getPositionForSection(int sectionIndex) { for (int i = 0; i < getCount(); i++) { String sortStr = list.get(i).getLetters(); char firstChar = sortStr.charAt(0); if (firstChar == sectionIndex) { return i; } } return -1; } @Override public int getSectionForPosition(int position) { return list.get(position).getLetters().charAt(0); } final static class ViewHolder { /** * 首字母 */ TextView tvLetter; /** * 昵称 */ TextView tvTitle; /** * 头像 */ SelectableRoundedImageView mImageView; /** * userid */ TextView tvUserId; } }