/** * */ package com.jiuqi.njt.adapter; import java.util.ArrayList; import java.util.HashSet; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.amap.api.search.core.LatLonPoint; import com.jiuqi.mobile.nigo.comeclose.bean.app.gps.UserPositionBean; import com.jiuqi.mobile.nigo.comeclose.bean.base.RoleCode; import com.jiuqi.njt.R; import com.jiuqi.njt.data.OptsharepreInterface; import com.jiuqi.njt.ui.PoiDetailActivity; import com.jiuqi.njt.util.Constants; import com.jiuqi.njt.util.UIUtil; /** * @author liyue * 周边查询列表适配器 */ public class PoiSearchResultAdapter extends BaseAdapter{ private Context context; private LayoutInflater inflater; private HashSet<String> selectedItems; private HashSet<ViewHolder> allHolders; private OptsharepreInterface sharePre; private double startPointLatitude; private double startPointLongitude; public static Drawable IMG_BG_CHECKED = null; public static Drawable IMG_BG = null; private UserPositionBean[] beans = new UserPositionBean[]{}; private RoleCode selectRoleCode; public PoiSearchResultAdapter(Context context, UserPositionBean[] result){ this.context = context; inflater = LayoutInflater.from(context); selectedItems = new HashSet<String>(); allHolders = new HashSet<ViewHolder>(); this.sharePre = new OptsharepreInterface(context); startPointLatitude = UIUtil.tryToDouble(sharePre.getPres(Constants.PREFERENCE_KEY_LATITUDE)); startPointLongitude = UIUtil.tryToDouble(sharePre.getPres(Constants.PREFERENCE_KEY_LONGITUDE)); IMG_BG_CHECKED = context.getResources().getDrawable(R.drawable.img_checkbox_checked); IMG_BG= context.getResources().getDrawable(R.drawable.img_checkbox); // 完成测试后取消注释 if(result != null && result.length > 0){ beans = result; } // 测试代码 // beans = initTestData(); } public RoleCode getSelectRoleCode() { return selectRoleCode; } public void setSelectRoleCode(RoleCode selectRoleCode) { this.selectRoleCode = selectRoleCode; } /** * 模拟测试数据 * @return UserPositionBean[] */ // private UserPositionBean[] initTestData(){ // ArrayList<UserPositionBean> plist = new ArrayList<UserPositionBean>(); // UserPositionBean p = null; // for(int i = 0; i < 30; i++){ // p = new UserPositionBean(); // p.setCity("郑州市"); // p.setCoGuid(UUID.randomUUID().toString()); // p.setContent("content" + i); // p.setCoSim("1390000111" + i); // p.setCountry("阳城区镇"); // p.setCreateDate(new Date()); // p.setGuid(); // p.setIsSuccess(0); // p.setLatitude(Constants.ZHENGZHOU.getLatitude()); // p.setLbsMode(LBSMode.JIz); // p.setLbsType(LBSType.client); // p.setLongitude(Constants.ZHENGZHOU.getLongitude()); // p.setMemo("memo" + i); // p.setProvince("河南省"); // p.setRaduis(5); // p.setSim("1380013801" + i); // p.setUserGuid(UUID.randomUUID().toString()); // p.setUserName("userName" + i); // plist.add(p); // } // return plist.toArray(new UserPositionBean[plist.size()]); // } @Override public int getCount(){ return beans.length; } /** * 全选 */ public void selectAll(){ for(ViewHolder holder : allHolders){ holder.checkbox.setImageDrawable(IMG_BG_CHECKED); } selectedItems.clear(); for(UserPositionBean bean : beans){ selectedItems.add(bean.getGuid()); } } /** * 全不选 */ public void deSelectAll(){ for(ViewHolder holder : allHolders){ holder.checkbox.setImageDrawable(IMG_BG); } selectedItems.clear(); } /** * 得到选中的电话号码 * @return */ public String[] getSelectedMobiles() { ArrayList<String> mobiles = new ArrayList<String>(); //User String mobile = ""; for(String guid : selectedItems){ mobile = getUserMobileById(guid); if (!TextUtils.isEmpty(mobile)) { mobiles.add(mobile); } } return mobiles.toArray(new String[mobiles.size()]); } /** * 根据guid查电话号码 * @param guid * @return */ private String getUserMobileById(String guid) { for (UserPositionBean bean : beans) { if (bean.getGuid().equals(guid)) { return bean.getSim(); } } return ""; } @Override public Object getItem(int position){ if(beans.length > position){ return beans[position]; } else{ return null; } } @Override public long getItemId(int position){ return position; } @Override public View getView(int position, View convertView, ViewGroup parent){ final UserPositionBean obj = beans[position]; ViewHolder holder = null; if(convertView == null){ holder = new ViewHolder(); convertView = inflater.inflate(R.layout.listview_item_poi, null); holder.checkbox = (ImageView)convertView.findViewById(R.id.checkBox); holder.tvName = (TextView)convertView.findViewById(R.id.tvName); holder.tvDescription = (TextView)convertView.findViewById(R.id.tvDescription); holder.btnMap = (Button)convertView.findViewById(R.id.btnMap); holder.btnPhoneCall = (Button)convertView.findViewById(R.id.btnPhoneCall); convertView.setTag(holder); allHolders.add(holder); } else{ holder = (ViewHolder)convertView.getTag(); } holder.checkbox.setImageDrawable(IMG_BG); if(selectedItems.contains(obj.getGuid())){ holder.checkbox.setImageDrawable(IMG_BG_CHECKED); } holder.checkbox.setOnClickListener(new ImgOnClickListener(obj.getGuid())); holder.tvName.setText(obj.getUserName()); StringBuffer sb = new StringBuffer(); if(!TextUtils.isEmpty(obj.getProvince())){ sb.append(obj.getProvince()); } if(!TextUtils.isEmpty(obj.getCity())){ sb.append(obj.getCity()); } if(!TextUtils.isEmpty(obj.getCountry())){ sb.append(obj.getCountry()); } holder.tvDescription.setText(sb.toString()); holder.btnMap.setOnClickListener(new BtnMapOnClickListener(new LatLonPoint(obj.getLatitude(), obj .getLongitude()))); holder.btnPhoneCall.setOnClickListener(new BtnPhoneCallOnClickListener(obj.getSim())); convertView.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ Intent intent = new Intent(); intent.setClass(context, PoiDetailActivity.class); intent.putExtra("obj", obj); intent.putExtra(Constants.PARAM_NAME, selectRoleCode); context.startActivity(intent); } }); return convertView; } /** * checkbox图片点击事件 */ private class ImgOnClickListener implements OnClickListener{ private String guid; public ImgOnClickListener(String guid){ this.guid = guid; } @Override public void onClick(View v){ ImageView img = (ImageView)v; //如果包含了,则取消选择,否则选择 if(selectedItems.contains(guid)){ selectedItems.remove(guid); img.setImageDrawable(IMG_BG); }else{ selectedItems.add(guid); img.setImageDrawable(IMG_BG_CHECKED); } } } /** * 地图按钮点击事件 */ private class BtnMapOnClickListener implements OnClickListener{ private LatLonPoint endPoint; public BtnMapOnClickListener(LatLonPoint endPoint){ this.endPoint = endPoint; } @Override public void onClick(View v){ UIUtil.requestNav(context, new LatLonPoint(startPointLatitude, startPointLongitude), endPoint); } } /** * 电话按钮点击事件 */ private class BtnPhoneCallOnClickListener implements OnClickListener{ private String mobile; public BtnPhoneCallOnClickListener(String mobile){ this.mobile = mobile; } @Override public void onClick(View v){ UIUtil.tryToDial(context, mobile); } } /** * 控件缓存类 */ public class ViewHolder{ public TextView tvName, tvDescription; public Button btnMap, btnPhoneCall; public ImageView checkbox; @Override public int hashCode(){ final int prime = 31; int result = 1; result = prime * result + getOuterType().hashCode(); result = prime * result + ((btnMap == null) ? 0 : btnMap.hashCode()); result = prime * result + ((btnPhoneCall == null) ? 0 : btnPhoneCall.hashCode()); result = prime * result + ((checkbox == null) ? 0 : checkbox.hashCode()); result = prime * result + ((tvDescription == null) ? 0 : tvDescription.hashCode()); result = prime * result + ((tvName == null) ? 0 : tvName.hashCode()); return result; } @Override public boolean equals(Object obj){ if(this == obj) return true; if(obj == null) return false; if(getClass() != obj.getClass()) return false; ViewHolder other = (ViewHolder)obj; if(!getOuterType().equals(other.getOuterType())) return false; if(btnMap == null){ if(other.btnMap != null) return false; } else if(!btnMap.equals(other.btnMap)) return false; if(btnPhoneCall == null){ if(other.btnPhoneCall != null) return false; } else if(!btnPhoneCall.equals(other.btnPhoneCall)) return false; if(checkbox == null){ if(other.checkbox != null) return false; } else if(!checkbox.equals(other.checkbox)) return false; if(tvDescription == null){ if(other.tvDescription != null) return false; } else if(!tvDescription.equals(other.tvDescription)) return false; if(tvName == null){ if(other.tvName != null) return false; } else if(!tvName.equals(other.tvName)) return false; return true; } private PoiSearchResultAdapter getOuterType(){ return PoiSearchResultAdapter.this; } } }