/**
*
*/
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;
}
}
}