Android仿京东地址省市区选择器
首先我第一次写博客,这篇博客是对选择器的改进
非常感谢ywp_小白的博客,我参照了他写的地区选择器,然后实施了改进。
首先,原博客存在的问题
首先贴出原作者的链接:https://blog.youkuaiyun.com/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);
}
这样就可以实现简单的取消功能了。
感悟
由于本人是安卓新手,第一次写博客,还望大神多多指教,有什么不合适的地方可以联系我。