/* * 官网地站:http://www.ShareSDK.cn * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 ShareSDK.cn. All rights reserved. */ package com.kaixin.android.view; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import android.content.Context; import android.content.Intent; import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.kaixin.android.R; import com.kaixin.android.activity.ContactDetailPage; import com.kaixin.android.utils.Utils; import com.kaixin.android.view.ContactsListView.GroupAdapter; import com.kaixin.android.view.DefaultContactViewItem.ViewHolder; /** * 联系人列表adapter */ public class ContactsAdapter extends GroupAdapter { private ArrayList<String> titles; private ArrayList<ArrayList<HashMap<String, Object>>> contacts; private ArrayList<HashMap<String, Object>> friendsInApp = new ArrayList<HashMap<String, Object>>(); private ArrayList<HashMap<String, Object>> contactsOutApp = new ArrayList<HashMap<String, Object>>(); private Context context; public ContactsAdapter(ContactsListView view, ArrayList<HashMap<String, Object>> friendsInApp, ArrayList<HashMap<String, Object>> contactsOutApp, Context context) { super(view); this.friendsInApp = friendsInApp; this.contactsOutApp = contactsOutApp; this.context = context; search(null); } /** * 搜索 * * @param token * 搜索的关键字 */ public void search(String token) { titles = new ArrayList<String>(); contacts = new ArrayList<ArrayList<HashMap<String, Object>>>(); if (friendsInApp.size() > 0) { reSortFia(token, friendsInApp); } if (contactsOutApp.size() > 0) { reSortFoa(token, contactsOutApp); } } /** 数据处理 */ private void reSortFia(String token, ArrayList<HashMap<String, Object>> data) { boolean isEmptyToken = TextUtils.isEmpty(token); ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); for (HashMap<String, Object> contact : data) { String name = ""; if (contact.containsKey("nickname")) { name = String.valueOf(contact.get("nickname")); } else if (contact.containsKey("displayname")) { name = String.valueOf(contact.get("displayname")); } else if (contact.containsKey("phone")) { name = String.valueOf(contact.get("phone")); } if (TextUtils.isEmpty(name)) { continue; } if (isEmptyToken || (!TextUtils.isEmpty(name) && name.contains(token))) { list.add(contact); } } if (list.size() > 0) { titles.add(view.getContext().getResources().getString(R.string.smssdk_contacts_in_app)); contacts.add(list); } } /** 数据处理 */ private void reSortFoa(String token, ArrayList<HashMap<String, Object>> data) { boolean isEmptyToken = TextUtils.isEmpty(token); ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); for (HashMap<String, Object> contact : data) { String name = ""; if (contact.containsKey("displayname")) { name = String.valueOf(contact.get("displayname")); } else if (contact.containsKey("phones")) { @SuppressWarnings("unchecked") ArrayList<HashMap<String, Object>> phones = (ArrayList<HashMap<String, Object>>) contact.get("phones"); if (phones != null && phones.size() > 0) { name = (String) phones.get(0).get("phone"); } } if (TextUtils.isEmpty(name)) { continue; } if (isEmptyToken || (!TextUtils.isEmpty(name) && name.contains(token))) { list.add(contact); } } if (list.size() > 0) { titles.add(view.getContext().getResources().getString(R.string.smssdk_contacts_out_app)); contacts.add(list); } } public int getGroupCount() { return titles == null ? 0 : titles.size(); } public int getCount(int group) { if (contacts == null) { return 0; } ArrayList<HashMap<String, Object>> list = contacts.get(group); if (list == null) { return 0; } return list.size(); } public String getGroupTitle(int group) { if (titles.size() > 0) { return titles.get(group).toString(); } else { return null; } } public HashMap<String, Object> getItem(int group, int position) { if (contacts.size() > 0) { return contacts.get(group).get(position); } else { return null; } } public TextView getTitleView(int group, TextView convertView, ViewGroup parent) { if (convertView == null) { convertView = new TextView(parent.getContext()); convertView.setBackgroundColor(0xffeae8ee); convertView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); convertView.setTextColor(0xff999999); int dp_11 = Utils.dip2px(parent.getContext(), 11); convertView.setPadding(dp_11, 0, 0, 0); convertView.setWidth(LayoutParams.MATCH_PARENT); int dp_26 = Utils.dip2px(parent.getContext(), 26); convertView.setHeight(dp_26); convertView.setGravity(Gravity.CENTER_VERTICAL); } String title = getGroupTitle(group); if (!TextUtils.isEmpty(title)) { convertView.setText(title); } return convertView; } @Override public View getView(final int group, final int position, View convertView, final ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); LayoutInflater inflater = LayoutInflater.from(parent.getContext()); convertView = inflater.inflate(R.layout.smssdk_contacts_listview_item, null); viewHolder.ivContact = (ImageView) convertView.findViewById(R.id.iv_contact); viewHolder.tvName = (TextView) convertView.findViewById(R.id.tv_name); viewHolder.tvContact = (TextView) convertView.findViewById(R.id.tv_contact); viewHolder.btnAdd = (Button) convertView.findViewById(R.id.btn_add); viewHolder.bg = convertView.findViewById(R.id.rl_lv_item_bg); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } final HashMap<String, Object> user = getItem(group, position); if(user != null){ // 如果user包含“fia”,则为应用内好友 if (user.containsKey("fia")) { viewHolder.tvName.setText(String.valueOf(user.get("nickname"))); viewHolder.tvContact.setVisibility(View.VISIBLE); String dspName = (String) user.get("displayname"); if (TextUtils.isEmpty(dspName)) { viewHolder.tvContact.setText(String.valueOf(user.get("phone"))); } else { viewHolder.tvContact.setText(dspName); } viewHolder.btnAdd.setText(R.string.smssdk_add_contact); } else { String dspName = (String) user.get("displayname"); if (TextUtils.isEmpty(dspName)) { @SuppressWarnings("unchecked") ArrayList<HashMap<String, Object>> phones = (ArrayList<HashMap<String, Object>>) user.get("phones"); if (phones != null && phones.size() > 0) { String cp = (String) phones.get(0).get("phone"); viewHolder.tvName.setText(cp); } } else { viewHolder.tvName.setText(dspName); } viewHolder.tvContact.setVisibility(View.GONE); viewHolder.btnAdd.setText(R.string.smssdk_invite); } viewHolder.bg.setBackgroundColor(0xffffffff); //是否有新好友,如有,改变背景颜色 if(user.containsKey("isnew")){ boolean isNew = Boolean.valueOf(String.valueOf(user.get("isnew"))); if(isNew){ viewHolder.bg.setBackgroundColor(0xfff7fcff); } } //设置按钮事件 viewHolder.btnAdd.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(user.containsKey("fia")){ //TODO 在这里添加第一组的按钮事件 Toast.makeText(parent.getContext(), String.valueOf(user), Toast.LENGTH_SHORT).show(); } else{ Intent intent = new Intent(context, ContactDetailPage.class); intent.putExtra("user", (Serializable)user); context.startActivity(intent); } } }); } return convertView; } public class ViewHolder{ public View bg; public ImageView ivContact; public TextView tvName; public TextView tvContact; public Button btnAdd; } /*public View getView(final int group, final int position, View convertView, ViewGroup parent) { HashMap<String, Object> data = getItem(group, position); return itemMaker.getView(data, convertView, parent); }*/ }