这是上个星期自己摸索出来的一个逻辑,可能很复杂,用的也不是很先进的方法打,但是总归是摸索出来了,记录一下免得以后忘了
功能描述:
1、当添加数据的时候,实现spinner地区之间的三级联动。
2、当修改数据的时候,要根据已有的地区将联动显示完整,例如拿到的值为“虎门镇”,那么就要在二级spinner显示东莞市,一级spinner显示广东省
界面代码很简单就三个spinner这里就不放代码了,直接Java代码
private Spinner suoshushequ,erjisq,sjsq;
先定义三个spinner,然后是找id
suoshushequ=(Spinner) findViewById(R.id.rkregister_belonetoshequ);//所属社区
erjisq=(Spinner) findViewById(R.id.rkregister_sssqerji);//二级地区
sjsq=(Spinner) findViewById(R.id.rkregister_sssqsanji);//三级地区
然后是添加时候的核心代码
ArrayAdaptershiadapter3=ArrayAdapter.createFromResource(this,R.array.dongguanshi,android.R.layout.simple_spinner_item);
shiadapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
suoshushequ.setAdapter(shiadapter3);
suoshushequ.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> arg0, View arg1,
int position, long arg3) {
Spinner spinner=(Spinner) arg0;
String aaa=(String) spinner.getItemAtPosition(position);
ArrayAdapter sheadapter3 = ArrayAdapter.createFromResource(CZRKRegisterActivity.this, R.array.gcq, android.R.layout.simple_spinner_item);
if (aaa.equals("莞城区")) {
if (aa.equals("tj")) {
sheadapter3=ArrayAdapter.createFromResource(CZRKRegisterActivity.this,R.array.gcq,android.R.layout.simple_spinner_item); sheadapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);}else if (aa.equals("xg")) { sheadapter3=CZRKRegisterActivity.this.sheadapter3; sheadapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);}
erjisq.setAdapter(sheadapter3);
erjisq.setVisibility(View.VISIBLE); erjisq.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> arg0, View arg1,int arg2, long arg3) {
Spinner spinner=(Spinner) arg0;
final String bb(String)spinner.getItemAtPosition(arg2);
diqu=bb;
for (int i = 0; i < sqchoose.length; i++) {
if (diqu.equals(sqchoose[i])) {
dbplace=mshequ[i];
}
}
}
@Override
public void onNothingSelected(AdapterView> arg0) {
if (aa.equals("tj")) {
diqu="莞城区";
for (int i = 0; i < sqchoose.length; i++) {
if (diqu.equals(sqchoose[i])) {
dbplace=mshequ[i];
}
}
}
}
});
}else if (aaa.equals("东城区")) {
if (aa.equals("tj")) {
sheadapter3=ArrayAdapter.createFromResource(CZRKRegisterActivity.this, R.array.dcq, android.R.layout.simple_spinner_item);
sheadapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
erjisq.setAdapter(sheadapter3);
}else if (aa.equals("xg")) {
sheadapter3=CZRKRegisterActivity.this.sheadapter4;
sheadapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); }
erjisq.setVisibility(View.VISIBLE);
Log.i("12", aa);
erjisq.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> arg0, View arg1,
int arg2, long arg3) {
Spinner spinner=(Spinner) arg0;
String bb=(String) spinner.getItemAtPosition(arg2);
Log.i("gg", "000000"+bb);
ArrayAdapter zhuadapter3 = ArrayAdapter.createFromResource(CZRKRegisterActivity.this, R.array.zssq, android.R.layout.simple_spinner_item);
if (bb.equals("主山社区")) {
if (aa.equals("tj")) {
zhuadapter3=ArrayAdapter.createFromResource(CZRKRegisterActivity.this, R.array.zssq, android.R.layout.simple_spinner_item);
zhuadapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sjsq.setAdapter(zhuadapter3);
}
sjsq.setVisibility(View.VISIBLE);
sjsq.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> arg0,View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
Spinner spinner=(Spinner) arg0;
String cc=(String) spinner.getItemAtPosition(arg2);
diqu=cc;
Log.i("31", diqu);
for (int i = 0; i < sqchoose.length; i++) {
if (diqu.equals(sqchoose[i])) {
dbplace=mshequ[i];
}
}
Log.i("31", dbplace);
}
@Override
public void onNothingSelected(AdapterView> arg0) {
if (aa.equals("tj")) {
diqu="主山社区";
for (int i = 0; i < sqchoose.length; i++) {
if (diqu.equals(sqchoose[i])) {
dbplace=mshequ[i];
}
}
}
}
});
}else { sjsq.setVisibility(View.INVISIBLE);
diqu=bb;
Log.i("21", diqu);
for (int i = 0; i < sqchoose.length; i++) {
if (diqu.equals(sqchoose[i])) {
dbplace=mshequ[i];
}
}
Log.i("21", dbplace);
}
}
@Override
public void onNothingSelected(AdapterView> arg0) {
if (aa.equals("tj")) {
diqu="东城区";
for (int i = 0; i < sqchoose.length; i++) {
if (diqu.equals(sqchoose[i])) {
dbplace=mshequ[i];
}
}
}
}
});
}else {
erjisq.setVisibility(View.INVISIBLE);
sjsq.setVisibility(View.INVISIBLE);
diqu=aaa;
Log.i("13", diqu);
for (int i = 0; i < sqchoose.length; i++) {
if (diqu.equals(sqchoose[i])) {
dbplace=mshequ[i];
}
}
}
}
@Override
public void onNothingSelected(AdapterView> arg0) {
dbplace="1";
}
});
这是以东莞市,镇区,社区为例子的,当中的item已经在value下添加array文件
下面是修改时的一些关键代码
首先新建一个方法,代码和添加基本一样,只不过去掉判断是添加还是修改的语句
然后就是调用
String suosq=czEntity.getFP09();
for (int i = 0; i < mshequ.length; i++) {
if (suosq.equals(mshequ[i])){
suoshu=sqchoose[i];
}
} zhuadapter3=ArrayAdapter.createFromResource(CZRKRegisterActivity.this,R.array.zssq,android.R.layout.simple_spinner_item);
zhuadapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sheadapter3=ArrayAdapter.createFromResource(CZRKRegisterActivity.this,R.array.gcq,android.R.layout.simple_spinner_item);
sheadapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sheadapter4=ArrayAdapter.createFromResource(CZRKRegisterActivity.this,R.array.dcq,android.R.layout.simple_spinner_item);
sheadapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
for (int i = 0; i < zssq.length; i++) {
if (suoshu.equals(zssq[i])) {
sjsq.setAdapter(zhuadapter3);
sjsq.setVisibility(View.VISIBLE);
setSpinnerItemSelectedByValue(sjsq, suoshu);
erjisq.setAdapter(sheadapter4);
erjisq.setVisibility(View.VISIBLE);
ejsqchoose();
yjsqchoose();
setSpinnerItemSelectedByValue(erjisq, "主山社区");
setSpinnerItemSelectedByValue(suoshushequ, "东城区");
}else {
for (int j = 0; j < gcq.length; j++) {
if (suoshu.equals(gcq[j])) {
erjisq.setAdapter(sheadapter3); erjisq.setVisibility(View.VISIBLE);
ejsqchoose();
yjsqchoose();
setSpinnerItemSelectedByValue(erjisq, suoshu);
setSpinnerItemSelectedByValue(suoshushequ, "莞城区");
ejsqchoose();
}else {
for (int j2 = 0; j2 < dcq.length; j2++) {
if (suoshu.equals(dcq[j2])) {
erjisq.setAdapter(sheadapter4);
erjisq.setVisibility(View.VISIBLE);
ejsqchoose();
yjsqchoose();
setSpinnerItemSelectedByValue(erjisq, suoshu);
setSpinnerItemSelectedByValue(suoshushequ, "东城区");
}else {
setSpinnerItemSelectedByValue(suoshushequ, suoshu);
yjsqchoose();
}
}
}
}
}
}
当然还有赖于网上找到的这个方法:
public static void setSpinnerItemSelectedByValue(Spinner spinner,String value){
SpinnerAdapter apsAdapter= spinner.getAdapter(); //得到SpinnerAdapter对象
int k= apsAdapter.getCount();
Log.i("11111111", "fffff"+k);
for(int i=0;iif(value.equals(apsAdapter.getItem(i).toString())){
spinner.setSelection(i,true);// 默认选中项
break;
}
}
}
至此功能已经全部实现了,虽然代码写的很差,用的可能是最差的方法来实现这个功能,但是对于刚刚培训出来工作的我是个很大的鼓励,继续加油,在实战中成长,成长中总结,总结中走得跟远。加油!!