对Android仿京东地址省市区选择器的小改动

首先我第一次写博客,这篇博客是对选择器的改进

非常感谢ywp_小白的博客,我参照了他写的地区选择器,然后实施了改进。

首先,原博客存在的问题

首先贴出原作者的链接:https://blog.csdn.net/QianNiYouShouZuo/article/details/78714847
github链接:https://github.com/ywp0919/AddressPickerLib

原作者写的地区选择器,只有一个确定按钮,如果点击地区,弹出了地区选择框,但是此时想返回,问题1:点击屏幕其他地方没有反应;问题2:没有一个取消按钮:问题3:点击手机返回按钮直接返回到了之前的Activity。

修改页面如下

在这里插入图片描述
我的修改过程:我是直接添加依赖导入的库,所以修改的类是我新建的,和原作者同名,进行修改。只需要把AddressPickerView和Bean两个类新建复制代码然后进行修改。注意自定义layout的包名要改成自己项目的包,或者可以下载作者的源代码进行修改。
下面附上修改后的源代码节选:
1.首先在address_picker_view.xml里面添加按钮:

   <TextView
            android:id="@+id/tvCancle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="?attr/selectableItemBackgroundBorderless"
            android:padding="13dp"
            android:text="取消"
            android:textSize="17sp" />

2.在AddressPickerView里面新定义一个借口和调用方法:

/**
* 点取消回调这个接口
*/
public interface OnAddressPickerCancleListener {
        void onCancleClick();
    }

    public void setOnAddressPickerCancle(OnAddressPickerCancleListener listener) {
        this.mOnAddressPickerCancleListener = listener;
    }

3.在AddressPickerView属性里面定义该接口和取消按钮:

private OnAddressPickerCancleListener mOnAddressPickerCancleListener;
private TextView mTvCancle;//取消

4.在AddressPickerView的init方法里面添加:

mTvCancle = rootView.findViewById(R.id.tvCancle);
mTvCancle.setOnClickListener(this);
mTvCancle.setTextColor(defaultSureUnClickColor);

5.在AddressPickerView定义cancle方法用于回调:

//点取消
    private void cancle() {
        if (mOnAddressPickerCancleListener != null) {
            mOnAddressPickerCancleListener.onCancleClick();
        }
    }

6.最后在AddressPickerView的onClick方法里面添加:

        switch (v.getId()) {
            case R.id.tvSure:
                sure();
                break;
            case R.id.tvCancle:
                cancle();
                break;
        }

这里说明一下,原作者之前用的if来判断,个人比较喜欢用switch,所以进行了修改。以上是修改了原作者的代码

实际调用

在原作者showAddressPickerPop方法里面实现OnAddressPickerCancleListener借口:

    private void showAddressPickerPop() {
        final PopupWindow popupWindow = new PopupWindow(this);
        View rootView = LayoutInflater.from(this).inflate(R.layout.pop_address_picker, null, false);
        AddressPickerView addressView = rootView.findViewById(R.id.apvAddress);
        addressView.setOnAddressPickerSure(new AddressPickerView.OnAddressPickerSureListener() {
            @Override
            public void onSureClick(String address, String provinceCode, String cityCode, String districtCode) {
            //    mTvAddress.setText(address);
                Toast.makeText(AdoptionCenterActivity.this, address, Toast.LENGTH_SHORT).show();
                popupWindow.dismiss();
            }
        });
        addressView.setOnAddressPickerCancle(new AddressPickerView.OnAddressPickerCancleListener() {
            @Override
            public void onCancleClick() {
                popupWindow.dismiss();
            }
        });
        popupWindow.setContentView(rootView);
        popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        popupWindow.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
        popupWindow.showAsDropDown(btArea);

    }

这样就可以实现简单的取消功能了。

感悟

由于本人是安卓新手,第一次写博客,还望大神多多指教,有什么不合适的地方可以联系我。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值