Android开发选择地区联动弹框

155 阅读1分钟
Android开发选择地区联动弹框

省市区三级联动弹框,很常见的需求

一、思路:

引进的是AndroidPicker这个第三方库

二、效果图:

在这里插入图片描述

三、关键代码:
// 联系:893151960
public class MainActivity extends AppCompatActivity {

    private TextView tv_select_city;

    private String mProvinceVal;
    private String mCityVal;
    private String mZoneVal;

    private Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        tv_select_city = findViewById(R.id.tv_select_city);

        tv_select_city.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chooseCity(mContext);
            }
        });
    }

    private void chooseCity(Context context) {
        ArrayList<Province> list = CityUtil.getInstance().getCityList();
        if (list == null || list.size() == 0) {
            CityUtil.getInstance().getCityListFromAssets(context,new CommonCallback<ArrayList<Province>>() {
                @Override
                public void callback(ArrayList<Province> newList) {
                    if (newList != null) {
                        showChooseCityDialog(newList);
                    }
                }
            });
        } else {
            showChooseCityDialog(list);
        }
    }

    private void showChooseCityDialog(ArrayList<Province> list) {
        String province = mProvinceVal;
        String city = mCityVal;
        String district = mZoneVal;

        showCityChooseDialog(this, list, province, city, district, new AddressPicker.OnAddressPickListener() {
            @Override
            public void onAddressPicked(Province province, final City city, County county) {
                String provinceName = province.getAreaName();
                String cityName = city.getAreaName();
                String zoneName = county.getAreaName();
                mProvinceVal = provinceName;
                mCityVal = cityName;
                mZoneVal = zoneName;
                final String location = mProvinceVal+""+mCityVal+""+mZoneVal;
                if (tv_select_city != null) {
                    tv_select_city.setText(location);
                }
            }
        });
    }

    /**
     * 城市选择
     */
    public  void showCityChooseDialog(Activity activity, ArrayList<Province> list,
                                            String province, String city, String district, AddressPicker.OnAddressPickListener listener) {
        AddressPicker picker = new AddressPicker(activity, list);
        picker.setTextColor(0xff323232);
        picker.setDividerColor(0xffdcdcdc);
        picker.setAnimationStyle(R.style.bottomToTopAnim);
        picker.setCancelTextColor(0xff969696);
        picker.setSubmitTextColor(0xffff5878);
        picker.setTopLineColor(0xfff5f5f5);
        picker.setTopBackgroundColor(0xfff5f5f5);
        picker.setHeight(dp2px(mContext,250));
        picker.setOffset(5);
        picker.setHideProvince(false);
        picker.setHideCounty(false);
        picker.setColumnWeight(3 / 9.0f, 3 / 9.0f, 3 / 9.0f);
        if (TextUtils.isEmpty(province)) {
            province = "北京市";
        }
        if (TextUtils.isEmpty(city)) {
            city = "北京市";
        }
        if (TextUtils.isEmpty(district)) {
            district = "东城区";
        }
        picker.setSelectedItem(province, city, district);
        picker.setOnAddressPickListener(listener);
        picker.show();
    }

    public  int dp2px(Context context, int dpVal) {
        return (int) (context.getResources().getDisplayMetrics().density * dpVal + 0.5f);
    }
}
四、项目demo源码结构图:

在这里插入图片描述

有问题或者需要完整源码的私信我