省市县三级联动(带拼音、首字母、经纬度坐标)
这几天公司要做一个配置程序,要求配置省市县和拼音缩写及首字母,在网上找了好久,都不全,特写此博客,积累知识。
一,布局文件.xml
1,activity_main.xml
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<Spinner
android:id="@+id/sp_prover"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</Spinner>
<Spinner
android:id="@+id/sp_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</Spinner>
<Spinner
android:id="@+id/sp_county"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</Spinner>
</LinearLayout>
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<Spinner
android:id="@+id/sp_prover"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</Spinner>
<Spinner
android:id="@+id/sp_city"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</Spinner>
<Spinner
android:id="@+id/sp_county"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</Spinner>
</LinearLayout>
2,tiem.xml
<TextView
android:id="@+id/tv_com_item_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="18dp"
android:text="beijing"/>
android:id="@+id/tv_com_item_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="18dp"
android:text="beijing"/>
二、MainActivity
@ViewInject(R.id.sp_prover)
private Spinner sp_prover; // 省
@ViewInject(R.id.sp_city)
private Spinner sp_city; // 市
@ViewInject(R.id.sp_county)
private Spinner sp_county;// 县
private CityAdapter adapter;
private CityModel model = new CityModel(MainActivity.this);
private List<ProverAndCity> proversList; // 所有的数据
List<ProverAndCity> provers = new ArrayList<ProverAndCity>(); // 省
List<ProverAndCity> datas = new ArrayList<ProverAndCity>(); // 市
List<ProverAndCity> countys = new ArrayList<ProverAndCity>(); // 县
private String pro;
private String data;
private String county;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
x.view().inject(this);
sp_prover.setOnItemSelectedListener(this);
sp_city.setOnItemSelectedListener(this);
sp_county.setOnItemSelectedListener(this);
model.findAllDate(new AsynCallBack() {
@Override
public void onErrorLoader(String msge) {
// TODO Auto-generated method stub
}
@Override
public void onDataLoader(Object obj) {
proversList = (List<ProverAndCity>) obj;
int star_index = 0;
int stop_index = 0;
int index = 0;
for (int i = 0; i < proversList.size(); i++) {
if (proversList.get(i).getPid() == 0) {
provers.add(proversList.get(i));
}
}
adapter = new CityAdapter(MainActivity.this, provers);
sp_prover.setAdapter(adapter);
}
});
}
// 根据省获取市,根据市获取县
private List<ProverAndCity> getCityDatas(int id, List<ProverAndCity> proversList) {
Log.e("proverInfor", "list = " + proversList.size() + " /id = " + id);
List<ProverAndCity> cityDatas = new ArrayList<ProverAndCity>(); // 市
// int pid = proversList.get(id).getPid();
for (int i = 0; i < proversList.size(); i++) {
if (proversList.get(i).getPid() == id) {
Log.w("proverInfor", "list 000 ");
cityDatas.add(proversList.get(i));
}
}
return cityDatas;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onItemSelected(AdapterView<?> arg0, View view, int position, long id1) {
switch (arg0.getId()) {
case R.id.sp_prover:
pro = provers.get(position).getName();
Log.d("onitemselected", " 00 pro = " + pro);
int id = provers.get(position).getId();
datas = getCityDatas(id, proversList);
adapter = new CityAdapter(MainActivity.this, datas);
sp_city.setAdapter(adapter);
break;
case R.id.sp_city:
data = datas.get(position).getName();
Log.d("onitemselected", " 11 data =" + data);
int id_data = datas.get(position).getId();
countys = getCityDatas(id_data, proversList);
adapter = new CityAdapter(MainActivity.this, countys);
sp_county.setAdapter(adapter);
break;
case R.id.sp_county:
county = countys.get(position).getName();
Log.d("onitemselected", " 22 county = " + county);
Toast.makeText(MainActivity.this, pro + " / " + data + " / " + county, Toast.LENGTH_LONG).show();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
private Spinner sp_prover; // 省
@ViewInject(R.id.sp_city)
private Spinner sp_city; // 市
@ViewInject(R.id.sp_county)
private Spinner sp_county;// 县
private CityAdapter adapter;
private CityModel model = new CityModel(MainActivity.this);
private List<ProverAndCity> proversList; // 所有的数据
List<ProverAndCity> provers = new ArrayList<ProverAndCity>(); // 省
List<ProverAndCity> datas = new ArrayList<ProverAndCity>(); // 市
List<ProverAndCity> countys = new ArrayList<ProverAndCity>(); // 县
private String pro;
private String data;
private String county;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
x.view().inject(this);
sp_prover.setOnItemSelectedListener(this);
sp_city.setOnItemSelectedListener(this);
sp_county.setOnItemSelectedListener(this);
model.findAllDate(new AsynCallBack() {
@Override
public void onErrorLoader(String msge) {
// TODO Auto-generated method stub
}
@Override
public void onDataLoader(Object obj) {
proversList = (List<ProverAndCity>) obj;
int star_index = 0;
int stop_index = 0;
int index = 0;
for (int i = 0; i < proversList.size(); i++) {
if (proversList.get(i).getPid() == 0) {
provers.add(proversList.get(i));
}
}
adapter = new CityAdapter(MainActivity.this, provers);
sp_prover.setAdapter(adapter);
}
});
}
// 根据省获取市,根据市获取县
private List<ProverAndCity> getCityDatas(int id, List<ProverAndCity> proversList) {
Log.e("proverInfor", "list = " + proversList.size() + " /id = " + id);
List<ProverAndCity> cityDatas = new ArrayList<ProverAndCity>(); // 市
// int pid = proversList.get(id).getPid();
for (int i = 0; i < proversList.size(); i++) {
if (proversList.get(i).getPid() == id) {
Log.w("proverInfor", "list 000 ");
cityDatas.add(proversList.get(i));
}
}
return cityDatas;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onItemSelected(AdapterView<?> arg0, View view, int position, long id1) {
switch (arg0.getId()) {
case R.id.sp_prover:
pro = provers.get(position).getName();
Log.d("onitemselected", " 00 pro = " + pro);
int id = provers.get(position).getId();
datas = getCityDatas(id, proversList);
adapter = new CityAdapter(MainActivity.this, datas);
sp_city.setAdapter(adapter);
break;
case R.id.sp_city:
data = datas.get(position).getName();
Log.d("onitemselected", " 11 data =" + data);
int id_data = datas.get(position).getId();
countys = getCityDatas(id_data, proversList);
adapter = new CityAdapter(MainActivity.this, countys);
sp_county.setAdapter(adapter);
break;
case R.id.sp_county:
county = countys.get(position).getName();
Log.d("onitemselected", " 22 county = " + county);
Toast.makeText(MainActivity.this, pro + " / " + data + " / " + county, Toast.LENGTH_LONG).show();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
三、adapter.class
public class CityAdapter extends BaseAdapter {
private Context context;
private List<ProverAndCity> datas;
private LayoutInflater inflater;
public CityAdapter(Context context, List<ProverAndCity> datas) {
super();
this.context = context;
this.datas = datas;
this.inflater = inflater.from(this.context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return datas.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ProverAndCity pac = datas.get(position);
ViewHolder holder;
Log.d("proverInfor", "pac = "+pac.getName());
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.item, null);
holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_com_item_one);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvTitle.setText(pac.getName() + "");
Log.d("proverInfor", "pac.getName() = "+pac.getName());
return convertView;
}
class ViewHolder {
TextView tvTitle;
}
}
private Context context;
private List<ProverAndCity> datas;
private LayoutInflater inflater;
public CityAdapter(Context context, List<ProverAndCity> datas) {
super();
this.context = context;
this.datas = datas;
this.inflater = inflater.from(this.context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return datas.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ProverAndCity pac = datas.get(position);
ViewHolder holder;
Log.d("proverInfor", "pac = "+pac.getName());
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.item, null);
holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_com_item_one);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvTitle.setText(pac.getName() + "");
Log.d("proverInfor", "pac.getName() = "+pac.getName());
return convertView;
}
class ViewHolder {
TextView tvTitle;
}
}
四、实体类
/**
* 实体类封装类
*
* @author zd
*
*/
public class ProverAndCity {
private int id;// :1,
private int pid;// ":0,
private String shortname;// ":"北京",
private String name;// ":"北京",
private String merger_name;// ":"中国,北京",
private int level;// ":1,
private String pinyin;// ":"beijing",
private String code;// ":null,
private String zip_code;// ":null,
private String first;// ":"B",
private String lng;// ":"116.405285",
private String lat;// ":"39.904989"
public int getId() {
return id;
}
public int getPid() {
return pid;
}
public String getShortname() {
return shortname;
}
public String getName() {
return name;
}
public String getMerger_name() {
return merger_name;
}
public int getLevel() {
return level;
}
public String getPinyin() {
return pinyin;
}
public String getCode() {
return code;
}
public String getZip_code() {
return zip_code;
}
public String getFirst() {
return first;
}
public String getLng() {
return lng;
}
public String getLat() {
return lat;
}
public void setId(int id) {
this.id = id;
}
public void setPid(int pid) {
this.pid = pid;
}
public void setShortname(String shortname) {
this.shortname = shortname;
}
public void setName(String name) {
this.name = name;
}
public void setMerger_name(String merger_name) {
this.merger_name = merger_name;
}
public void setLevel(int level) {
this.level = level;
}
public void setPinyin(String pinyin) {
this.pinyin = pinyin;
}
public void setCode(String code) {
this.code = code;
}
public void setZip_code(String zip_code) {
this.zip_code = zip_code;
}
public void setFirst(String first) {
this.first = first;
}
public void setLng(String lng) {
this.lng = lng;
}
public void setLat(String lat) {
this.lat = lat;
}
@Override
public String toString() {
return "ProverAndCity [id=" + id + ", pid=" + pid + ", shortname=" + shortname + ", name=" + name
+ ", merger_name=" + merger_name + ", level=" + level + ", pinyin=" + pinyin + ", code=" + code
+ ", zip_code=" + zip_code + ", first=" + first + ", lng=" + lng + ", lat=" + lat + "]";
}
public ProverAndCity(int id, int pid, String shortname, String name, String merger_name, int level, String pinyin,
String code, String zip_code, String first, String lng, String lat) {
super();
this.id = id;
this.pid = pid;
this.shortname = shortname;
this.name = name;
this.merger_name = merger_name;
this.level = level;
this.pinyin = pinyin;
this.code = code;
this.zip_code = zip_code;
this.first = first;
this.lng = lng;
this.lat = lat;
}
public ProverAndCity() {
super();
}
}
* 实体类封装类
*
* @author zd
*
*/
public class ProverAndCity {
private int id;// :1,
private int pid;// ":0,
private String shortname;// ":"北京",
private String name;// ":"北京",
private String merger_name;// ":"中国,北京",
private int level;// ":1,
private String pinyin;// ":"beijing",
private String code;// ":null,
private String zip_code;// ":null,
private String first;// ":"B",
private String lng;// ":"116.405285",
private String lat;// ":"39.904989"
public int getId() {
return id;
}
public int getPid() {
return pid;
}
public String getShortname() {
return shortname;
}
public String getName() {
return name;
}
public String getMerger_name() {
return merger_name;
}
public int getLevel() {
return level;
}
public String getPinyin() {
return pinyin;
}
public String getCode() {
return code;
}
public String getZip_code() {
return zip_code;
}
public String getFirst() {
return first;
}
public String getLng() {
return lng;
}
public String getLat() {
return lat;
}
public void setId(int id) {
this.id = id;
}
public void setPid(int pid) {
this.pid = pid;
}
public void setShortname(String shortname) {
this.shortname = shortname;
}
public void setName(String name) {
this.name = name;
}
public void setMerger_name(String merger_name) {
this.merger_name = merger_name;
}
public void setLevel(int level) {
this.level = level;
}
public void setPinyin(String pinyin) {
this.pinyin = pinyin;
}
public void setCode(String code) {
this.code = code;
}
public void setZip_code(String zip_code) {
this.zip_code = zip_code;
}
public void setFirst(String first) {
this.first = first;
}
public void setLng(String lng) {
this.lng = lng;
}
public void setLat(String lat) {
this.lat = lat;
}
@Override
public String toString() {
return "ProverAndCity [id=" + id + ", pid=" + pid + ", shortname=" + shortname + ", name=" + name
+ ", merger_name=" + merger_name + ", level=" + level + ", pinyin=" + pinyin + ", code=" + code
+ ", zip_code=" + zip_code + ", first=" + first + ", lng=" + lng + ", lat=" + lat + "]";
}
public ProverAndCity(int id, int pid, String shortname, String name, String merger_name, int level, String pinyin,
String code, String zip_code, String first, String lng, String lat) {
super();
this.id = id;
this.pid = pid;
this.shortname = shortname;
this.name = name;
this.merger_name = merger_name;
this.level = level;
this.pinyin = pinyin;
this.code = code;
this.zip_code = zip_code;
this.first = first;
this.lng = lng;
this.lat = lat;
}
public ProverAndCity() {
super();
}
}
五、Modle层
public class CityModel implements FindAll {
private Context context;
private String result;
public CityModel(Context context) {
super();
this.context = context;
}
@Override
public void findAllDate(AsynCallBack callback) {
StringBuilder sb = new StringBuilder();
try {
InputStream is = context.getAssets().open("sh_area.json");
byte[] buf = new byte[3749];
int len = -1;
while ((len = is.read(buf)) != -1) {
sb.append(new String(buf, 0, len, "UTF-8"));
}
is.close();
result = sb.toString();
JSONObject obj = new JSONObject(result);
String resutls = obj.getString("RECORDS");
JSONArray jsonArray = new JSONArray(resutls);
List<ProverAndCity> lists = new ArrayList<ProverAndCity>();
for (int i = 0; i < buf.length; i++) {
JSONObject c_obj = jsonArray.getJSONObject(i);
ProverAndCity p = new ProverAndCity();
p.setId(c_obj.getInt("id"));
p.setPid(c_obj.getInt("pid"));
p.setShortname(c_obj.getString("shortname"));
p.setName(c_obj.getString("name"));
p.setMerger_name(c_obj.getString("merger_name"));
p.setLevel(c_obj.getInt("level"));
p.setPinyin(c_obj.getString("pinyin"));
p.setCode(c_obj.getString("code"));
p.setZip_code(c_obj.getString("zip_code"));
p.setFirst(c_obj.getString("first"));
p.setLng(c_obj.getString("lng"));
p.setLat(c_obj.getString("lat"));
lists.add(p);
}
callback.onDataLoader(lists);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private Context context;
private String result;
public CityModel(Context context) {
super();
this.context = context;
}
@Override
public void findAllDate(AsynCallBack callback) {
StringBuilder sb = new StringBuilder();
try {
InputStream is = context.getAssets().open("sh_area.json");
byte[] buf = new byte[3749];
int len = -1;
while ((len = is.read(buf)) != -1) {
sb.append(new String(buf, 0, len, "UTF-8"));
}
is.close();
result = sb.toString();
JSONObject obj = new JSONObject(result);
String resutls = obj.getString("RECORDS");
JSONArray jsonArray = new JSONArray(resutls);
List<ProverAndCity> lists = new ArrayList<ProverAndCity>();
for (int i = 0; i < buf.length; i++) {
JSONObject c_obj = jsonArray.getJSONObject(i);
ProverAndCity p = new ProverAndCity();
p.setId(c_obj.getInt("id"));
p.setPid(c_obj.getInt("pid"));
p.setShortname(c_obj.getString("shortname"));
p.setName(c_obj.getString("name"));
p.setMerger_name(c_obj.getString("merger_name"));
p.setLevel(c_obj.getInt("level"));
p.setPinyin(c_obj.getString("pinyin"));
p.setCode(c_obj.getString("code"));
p.setZip_code(c_obj.getString("zip_code"));
p.setFirst(c_obj.getString("first"));
p.setLng(c_obj.getString("lng"));
p.setLat(c_obj.getString("lat"));
lists.add(p);
}
callback.onDataLoader(lists);
} catch (Exception e) {
e.printStackTrace();
}
}
}
六、接口AsynCallBack FindAll
public interface AsynCallBack {
// 获取成功后执行的方法
void onDataLoader(Object obj);
// 获取数据失败后执行方法
void onErrorLoader(String msge);
}
public interface FindAll {
/**
* 获取数据的方法
*
* @param pager
* 变量参数
* @param callback
* 回调方法
*/
void findAllDate(AsynCallBack callback);
}
/**
* 获取数据的方法
*
* @param pager
* 变量参数
* @param callback
* 回调方法
*/
void findAllDate(AsynCallBack callback);
}
源码下载:http://download.****.net/download/android_joke/9930879