package com.diandi.demo.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.SectionIndexer;
import android.widget.TextView;
import com.diandi.demo.R;
import com.diandi.demo.model.User;
import com.diandi.demo.util.ImageLoadOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
/**
* *******************************************************************************
* ********* Author : klob(kloblic@gmail.com) .
* ********* Date : 2014-11-29 .
* ********* Time : 11:46 .
* ********* Project name : Diandi1.18 .
* ********* Version : 1.0
* ********* Copyright @ 2014, klob, All Rights Reserved
* *******************************************************************************
*/
@SuppressLint("DefaultLocale")
public class ContactAdapter extends BaseAdapter implements SectionIndexer {
private Context ct;
private List<User> data;
public ContactAdapter(Context ct, List<User> datas) {
this.ct = ct;
this.data = datas;
}
/**
* 当ListView数据发生变化时,调用此方法来更新ListView
*
* @param @param list
* @return void
* @throws
* @Title: updateListView
* @Description: TODO
*/
public void updateListView(List<User> list) {
this.data = list;
notifyDataSetChanged();
}
public void remove(User user) {
this.data.remove(user);
notifyDataSetChanged();
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = LayoutInflater.from(ct).inflate(
R.layout.item_user_friend, null);
viewHolder = new ViewHolder();
viewHolder.alpha = (TextView) convertView.findViewById(R.id.alpha);
viewHolder.name = (TextView) convertView
.findViewById(R.id.tv_friend_name);
viewHolder.avatar = (ImageView) convertView
.findViewById(R.id.img_friend_avatar);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
User friend = data.get(position);
final String name = friend.getNick();
String avatarUrl = null;
if (friend.getAvatar() != null) {
avatarUrl = friend.getAvatar();
}
ImageLoader.getInstance().displayImage(avatarUrl, viewHolder.avatar,
ImageLoadOptions.getOptions());
viewHolder.name.setText(name);
// 根据position获取分类的首字母的Char ascii值
int section = getSectionForPosition(position);
// 如果当前位置等于该分类首字母的Char的位置 ,则认为是第一次出现
if (position == getPositionForSection(section)) {
viewHolder.alpha.setVisibility(View.VISIBLE);
viewHolder.alpha.setText(friend.getSortLetters());
} else {
viewHolder.alpha.setVisibility(View.GONE);
}
return convertView;
}
/**
* 根据ListView的当前位置获取分类的首字母的Char ascii值
*/
public int getSectionForPosition(int position) {
return data.get(position).getSortLetters().charAt(0);
}
/**
* 根据分类的首字母的Char ascii值获取其第一次出现该首字母的位置
*/
@SuppressLint("DefaultLocale")
public int getPositionForSection(int section) {
for (int i = 0; i < getCount(); i++) {
String sortStr = data.get(i).getSortLetters();
char firstChar = sortStr.toUpperCase().charAt(0);
if (firstChar == section) {
return i;
}
}
return -1;
}
@Override
public Object[] getSections() {
return null;
}
static class ViewHolder {
TextView alpha;// 首字母提示
ImageView avatar;
TextView name;
}
}