package com.itbox.grzl.activity;
import java.util.ArrayList;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.zhaoliewang.grzl.R;
import com.itbox.grzl.bean.AreaData;
import com.itbox.grzl.common.db.AreaListDB;
/**
* 选择地址(分三级列表)
*
* @author hyh creat_at:2013-8-5-上午11:38:21
*/
public class SelectAddrActivity extends BaseActivity implements OnClickListener, OnItemClickListener {
private static final int STATE_PROVINCE = 0;
private static final int STATE_CITY = 1;
private static final int STATE_DISTRICT = 2;
public static class Extra{
public static final String ProvinceCode = "provinceCode";
public static final String ProvinceName = "provinceName";
public static final String CityCode = "cityCode";
public static final String CityName = "cityName";
public static final String DistrictCode = "districtCode";
public static final String DistrictName = "districtName";
public static final String AddrModel = "addr";
}
private ListView mListview;
private TextView titleTv;
private int state = 0;
private AreaListDB db;
private ArrayList<AreaData> addrList = new ArrayList<AreaData>();
private int provinceCode;
private int cityCode;
private int districtCode;
private String provinceName = "";
private String cityName = "";
private String districtName ="";
private AddrAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_address);
mListview = (ListView) findViewById(R.id.chaddr_lv);
titleTv = (TextView) findViewById(R.id.page_tv_title);
findViewById(R.id.page_btn_back).setOnClickListener(this);
init();
}
private void init() {
db = new AreaListDB();
adapter = new AddrAdapter();
mListview.setSelector(android.R.color.transparent);
mListview.setAdapter(adapter);
mListview.setOnItemClickListener(this);
setProvinceDate();
}
@Override
public void onClick(View v) {
switch (state) {
case STATE_PROVINCE:// 从选择省份->-原页面
finish();
break;
case STATE_CITY:// 从选择城市->-选择省份
setProvinceDate();
break;
case STATE_DISTRICT:// 从选择取消->-选择城市
setCityDate();
break;
default:
break;
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (state) {
case STATE_PROVINCE:
provinceName = addrList.get(position).getAreaName();
provinceCode = addrList.get(position).getCode();
if(0 == addrList.get(position).getHaveChild()){
setResultData();
return;
}
setCityDate();
break;
case STATE_CITY:
cityName = addrList.get(position).getAreaName();
cityCode = addrList.get(position).getCode();
if (0 == addrList.get(position).getHaveChild()) {
setResultData();
return;
}
setDistrictData();
break;
case STATE_DISTRICT:
districtName = addrList.get(position).getAreaName();
districtCode = addrList.get(position).getCode();
setResultData();
break;
default:
break;
}
}
/**切换到区县界面*/
private void setDistrictData() {
titleTv.setText(cityName + "--选择区县");
ArrayList<AreaData> districtList = db.getChildArea(cityCode);
addrList = districtList;
adapter.notifyDataSetInvalidated();
state = 2;
}
private void setCityDate() {
ArrayList<AreaData> cityList = db.getChildArea(provinceCode);
addrList = cityList;
adapter.notifyDataSetInvalidated();
titleTv.setText(provinceName + "--选择城市");
state = STATE_CITY;
}
private void setProvinceDate(){
ArrayList<AreaData> provinces = db.getProvinces();
addrList = provinces;
adapter.notifyDataSetInvalidated();
titleTv.setText("选择省份");
state = STATE_PROVINCE;
}
private void setResultData() {
Intent data = new Intent();
data.putExtra(Extra.ProvinceCode, provinceCode);
data.putExtra(Extra.ProvinceName, provinceName);
data.putExtra(Extra.CityCode, cityCode);
data.putExtra(Extra.CityName, cityName);
data.putExtra(Extra.DistrictCode, districtCode);
data.putExtra(Extra.DistrictName, districtName);
setResult(RESULT_OK, data);
finish();
}
public class AddrAdapter extends BaseAdapter {
@Override
public int getCount() {
return addrList.size();
}
@Override
public Object getItem(int position) {
return addrList.get(position);
}
@Override
public long getItemId(int position) {
return addrList.get(position).getCode();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder = null;
if (null == convertView) {
convertView = View.inflate(SelectAddrActivity.this, R.layout.item_address, null);
holder = new Holder();
holder.textView = (TextView) convertView.findViewById(R.id.itemaddr_tv);
holder.imageView = (ImageView) convertView.findViewById(R.id.itemaddr_iv);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
holder.textView.setText(addrList.get(position).getAreaName());
if (2 == state || !addrList.get(position).hasChild()) {// 如果是区县
holder.imageView.setVisibility(View.INVISIBLE);
} else{
holder.imageView.setVisibility(View.VISIBLE);
}
return convertView;
}
}
public class Holder {
public TextView textView;
public ImageView imageView;
}
@Override
public String toString() {
return "选择地址(分三级列表)";
}
}