Android spinner实现全国省市县的三级联动

Android spinner实现全国省市县的三级联动
这种写法虽好,但存在一些小bug,下面是我修复的思路

问题一:三级联动的每一项值如何获取到?

String s = spinner1.getSelectedItem().toString();
if (!(spinner1.getSelectedItem().toString().equals(spinner2.getSelectedItem().toString()))){
   s+=" "+spinner2.getSelectedItem().toString();
}
if (!(spinner2.getSelectedItem().toString().equals(spinner3.getSelectedItem().toString()))){
   s+=" "+spinner3.getSelectedItem().toString();
}
tvAddress.setText(s);

问:为什么我要加判断再拼接?
答:因为每一项的三级联动的spinner1~3,会有一些相同的值,如果不判断那最终得到的结果可能会是“重庆 重庆 重庆”,如果加了判断得到的值就是“重庆”。
在这里插入图片描述

问题二:选择完地址后,下次点击时为什么spinner1和spinner2~3的值就不关联了(也就是没有被记住上一次选择的值),这会导致点开来我们看到“北京 上海 海口”

private int provinceIndex=-100,districtIndex=-100,cityIndex=-100;
if (provinceIndex!=-100){
    spinner1.setSelection(provinceIndex, true);
}else{
    spinner1.setSelection(0, true);
}
if (districtIndex!=-100){
    spinner2.setSelection(districtIndex, true);
}else{
    spinner2.setSelection(0, true);
}
if (cityIndex!=-100){
    spinner3.setSelection(cityIndex, true);
}else{
    spinner3.setSelection(0, true);
}
    spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            provinceIndex = position;
            Log.d("wangrui","provinceIndex="+provinceIndex);
            province = list.get(position);
            arrayAdapter2 = new ArrayAdapter<City>(MainActivity.this, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, list.get(position).getCitys());
            spinner2.setAdapter(arrayAdapter2);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
    pinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            districtIndex = position;
            Log.d("wangrui","districtIndex="+districtIndex);
            arrayAdapter3 = new ArrayAdapter<District>(MainActivity.this,androidx.appcompat.R.layout.support_simple_spinner_dropdown_item,province.getCitys().get(position).getDistricts());
            spinner3.setAdapter(arrayAdapter3);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
    spinner3.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            cityIndex = i;
            Log.d("wangrui","cityIndex="+cityIndex);
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

分析:原理就是在每一个监听事件里记住每一项的下标,设值的时候判断如果没记过下标默认选0,记过下次就默认显示上次选择的值

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值