package com.itbox.grzl.activity; import java.util.ArrayList; import java.util.List; import com.zhaoliewang.grzl.R; import com.itbox.grzl.bean.AreaData; import com.itbox.grzl.common.db.AreaListDB; import kankan.wheel.widget.OnWheelChangedListener; import kankan.wheel.widget.OnWheelScrollListener; import kankan.wheel.widget.WheelView; import kankan.wheel.widget.adapters.AreaWheelAdapter; import android.R.integer; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; /** * 选择地址(滚轴) * @author hyh * creat_at:2013-8-16-上午9:58:22 */ public class SelectAddrWheelActivity extends SelectAbstractActivity implements OnClickListener, OnWheelChangedListener, OnWheelScrollListener { 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"; public static final String Snippet = "Snippet"; } private WheelView wvProvince; private WheelView wvCity; private WheelView wvDistrict; private AreaListDB db; private boolean isScrolling; private ArrayList<AreaData> provinces; private ArrayList<AreaData> cities; private ArrayList<AreaData> districts; private EditText etSnippet; private Intent workIntent; private int currentWorkProviceIndex; private int currentWorkCityIndex; private int currentWrokDistricIndex; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_select_addr_wheel); setSelectView(findViewById(R.id.wheel_ll)); findViewById(R.id.wheel_cancel).setOnClickListener(this); findViewById(R.id.wheel_ok).setOnClickListener(this); etSnippet = (EditText)findViewById(R.id.wheel_et_snippet); wvProvince = (WheelView)findViewById(R.id.wheel_province); wvCity = (WheelView)findViewById(R.id.wheel_city); wvDistrict = (WheelView)findViewById(R.id.wheel_district); workIntent = getIntent(); db = new AreaListDB(); provinces = db.getProvinces(); for (int i = 0; i < provinces.size(); i++) { if (provinces.get(i).getCode()==workIntent.getIntExtra(Extra.ProvinceCode, 110000)) { currentWorkProviceIndex = i; } } wvProvince.setViewAdapter(new AreaWheelAdapter(this, provinces)); wvProvince.setCurrentItem(currentWorkProviceIndex); cities = db.getChildArea(provinces.get(currentWorkProviceIndex).getCode()); for (int i = 0; i < cities.size(); i++) { if (cities.get(i).getCode()==workIntent.getIntExtra(Extra.CityCode, 110000)) { currentWorkCityIndex = i; } } wvCity.setViewAdapter(new AreaWheelAdapter(this, cities)); wvCity.setCurrentItem(currentWorkCityIndex); districts = db.getChildArea(cities.get(currentWorkCityIndex).getCode()); for (int i = 0; i < districts.size(); i++) { if (districts.get(i).getCode()==workIntent.getIntExtra(Extra.DistrictCode, 110101)) { currentWrokDistricIndex = i; } } wvDistrict.setViewAdapter(new AreaWheelAdapter(this, districts)); wvDistrict.setCurrentItem(currentWrokDistricIndex); wvProvince.addChangingListener(this); wvProvince.addScrollingListener(this); wvCity.addChangingListener(this); wvCity.addScrollingListener(this); show(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.wheel_cancel: dismiss(); break; case R.id.wheel_ok: setResultData(); dismiss(); break; default: break; } } @Override public void onScrollingStarted(WheelView wheel) { isScrolling = true; } @Override public void onScrollingFinished(WheelView wheel) { isScrolling = false; switch (wheel.getId()) { case R.id.wheel_province: updateCities(); break; case R.id.wheel_city: updateDistricty(); break; default: break; } } @Override public void onChanged(WheelView wheel, int oldValue, int newValue) { if(isScrolling){ return; } switch (wheel.getId()) { case R.id.wheel_province: updateCities(); break; case R.id.wheel_city: updateDistricty(); break; default: break; } } private void updateSubWheel(WheelView parentWheel,List<AreaData> parentData, WheelView subWheel,List<AreaData> subData) { int oldIndex = subWheel.getCurrentItem(); int parentCode = parentData.get(parentWheel.getCurrentItem()).getCode(); ArrayList<AreaData> temp = null; switch (subWheel.getId()) { case R.id.wheel_city: temp = db.getChildArea(parentCode); break; case R.id.wheel_district: temp = db.getChildArea(parentCode); break; default: break; } subData.clear(); if(null != temp){ subData.addAll(temp); } subWheel.setViewAdapter(new AreaWheelAdapter(this, subData)); if(subData.size()<oldIndex){ subWheel.setCurrentItem(0); }else{ subWheel.setCurrentItem(0,true); } } private void updateCities(){ updateSubWheel(wvProvince, provinces, wvCity, cities); updateDistricty(); // ArrayList<AreaData> temp = db.getCities(cities.get(0).getCode()); // wvDistrict.setCurrentItem(0,true); // districts.clear(); // if(null != temp){ // districts.addAll(temp); // } // wvDistrict.setViewAdapter(new AreaWheelAdapter(this, districts)); } private void updateDistricty(){ updateSubWheel(wvCity, cities, wvDistrict, districts); } private void setResultData() { Intent data = new Intent(); AreaData proData = provinces.get(wvProvince.getCurrentItem()); AreaData cityData = cities.get(wvCity.getCurrentItem()); int provinceCode = proData.getCode(); String provinceName =proData.getAreaName(); int cityCode = cityData.getCode(); String cityName = cityData.getAreaName(); int districtCode = 0; String districtName = ""; if(districts.size() > 0){ AreaData distData = districts.get(wvDistrict.getCurrentItem()); districtCode = distData.getCode(); districtName = distData.getAreaName(); } if(100001 ==provinceCode || 100002 ==provinceCode || 100003 ==provinceCode || 100004 ==provinceCode){ provinceCode = cityCode = cities.get(wvCity.getCurrentItem()).getCode(); } String snippet = etSnippet.getText().toString(); 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); data.putExtra(Extra.Snippet,snippet ); setResult(RESULT_OK, data); finish(); } @Override public String toString() { return "选择地址(滚轴)"; } }