关于Spinner的二级三级甚至多级联动

这是上个星期自己摸索出来的一个逻辑,可能很复杂,用的也不是很先进的方法打,但是总归是摸索出来了,记录一下免得以后忘了
功能描述:
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);//三级地区

然后是添加时候的核心代码

ArrayAdapter<CharSequence>shiadapter3=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<CharSequence> 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<CharSequence> 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;i<k;i++){
            if(value.equals(apsAdapter.getItem(i).toString())){
                spinner.setSelection(i,true);// 默认选中项
                break;
            }
        }
    } 

至此功能已经全部实现了,虽然代码写的很差,用的可能是最差的方法来实现这个功能,但是对于刚刚培训出来工作的我是个很大的鼓励,继续加油,在实战中成长,成长中总结,总结中走得跟远。加油!!

猜你喜欢

转载自blog.csdn.net/sx454103455/article/details/68064499