Android仿京东收货地址
Android仿京东三级联动收货地址
1.在本地新建assets目录,存放三级联动json数据,取本地json数据作为数据源
String data = com.miles.zcstc.fingerdemo.JsonParser.getJson(context, "city.json");
JsonParser jsonParser = new JsonParser();
JsonArray jsonElements = jsonParser.parse(data).getAsJsonArray();//获取JsonArray对象
2.popupwindow弹窗
/*** 作者:Allen* 时间:2019/11/12 14:27* 描述:仿京东城市选择器*/public class JDCityPicker extends PopupWindow {View view;Context mContext;RecyclerView mRvProvince;RecyclerView mRvCity;RecyclerView mRvArea;ArrayList<CityInfoBean> beans;List<String> provinceList = new ArrayList<>();List<String> cityList = new ArrayList<>();List<String> areaList = new ArrayList<>();ProvinceAdapter mProvinceAdapter;CityAdapter mCityAdapter;AreaAdapter mAreaAdapter;String province, city, area;CityInfoBean mCityInfoBean;TextView mTvProvince;TextView mTvCity;TextView mTvArea;ImageView mImgClose;LinearLayout mLlSelect;onCitySelect citySelect;public JDCityPicker(Context context, onCitySelect citySelect) {super(context);this.mContext = context;this.citySelect = citySelect;init(context);}private void init(Context context) {view = LayoutInflater.from(context).inflate(R.layout.dialog_city_picker, null);mRvProvince = view.findViewById(R.id.rv_province);mRvCity = view.findViewById(R.id.rv_city);mRvArea = view.findViewById(R.id.rv_area);mTvProvince = view.findViewById(R.id.tv_province);mTvCity = view.findViewById(R.id.tv_city);mTvArea = view.findViewById(R.id.tv_area);mLlSelect = view.findViewById(R.id.ll_select);mImgClose = view.findViewById(R.id.img_close);this.setContentView(view);this.setBackgroundDrawable(new BitmapDrawable());WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);int height = (int) (wm.getDefaultDisplay().getHeight() * 0.8);this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);this.setHeight(height);this.setFocusable(true);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {this.setClippingEnabled(false);this.setOutsideTouchable(false);}this.setAnimationStyle(R.style.PopupWindow);String data = com.miles.zcstc.fingerdemo.JsonParser.getJson(context, "city.json");JsonParser jsonParser = new JsonParser();JsonArray jsonElements = jsonParser.parse(data).getAsJsonArray();//获取JsonArray对象beans = new ArrayList<>();Gson gson = new Gson();for (JsonElement bean : jsonElements) {CityInfoBean bean1 = gson.fromJson(bean, CityInfoBean.class);//解析beans.add(bean1);}initData(beans);mImgClose.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dismiss();}});mTvProvince.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {province = "";city = "";mTvCity.setVisibility(View.GONE);mTvProvince.setVisibility(View.GONE);mLlSelect.setVisibility(View.VISIBLE);mRvProvince.setVisibility(View.VISIBLE);mRvCity.setVisibility(View.GONE);mRvArea.setVisibility(View.GONE);cityList.clear();}});mTvCity.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {city = "";mTvCity.setVisibility(View.GONE);areaList.clear();
// initCity();mRvProvince.setVisibility(View.GONE);mRvCity.setVisibility(View.VISIBLE);mRvArea.setVisibility(View.GONE);}});/* mTvArea.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {initArea();}});*/}private void initData(ArrayList<CityInfoBean> beans) {for (int i = 0; i < beans.size(); i++) {provinceList.add(beans.get(i).getName());}initProvince();}private void initProvince() {mRvProvince.setVisibility(View.VISIBLE);mRvCity.setVisibility(View.GONE);mRvArea.setVisibility(View.GONE);mProvinceAdapter = new ProvinceAdapter(provinceList);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);linearLayoutManager.setOrientation(RecyclerView.VERTICAL);mRvProvince.setLayoutManager(linearLayoutManager);mRvProvince.setAdapter(mProvinceAdapter);mProvinceAdapter.setOnItemListener(new ProvinceAdapter.onItemClick() {@Overridepublic void onClick(int position, String name) {mProvinceAdapter.setSelection(position);mProvinceAdapter.notifyDataSetChanged();if (TextUtils.isEmpty(province)) {province = name;mTvProvince.setVisibility(View.VISIBLE);mTvProvince.setText(name);initCity();}mCityInfoBean = beans.get(position);for (int i = 0; i < mCityInfoBean.getCity().size(); i++) {cityList.add(mCityInfoBean.getCity().get(i).getName());}}});mProvinceAdapter.notifyDataSetChanged();}private void initCity() {mRvProvince.setVisibility(View.GONE);mRvCity.setVisibility(View.VISIBLE);mRvArea.setVisibility(View.GONE);mCityAdapter = new CityAdapter(cityList);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);linearLayoutManager.setOrientation(RecyclerView.VERTICAL);mRvCity.setLayoutManager(linearLayoutManager);mRvCity.setAdapter(mCityAdapter);mCityAdapter.setOnItemListener(new CityAdapter.onItemClick() {@Overridepublic void onClick(int position, String name) {if (TextUtils.isEmpty(city)) {city = name;mTvCity.setVisibility(View.VISIBLE);mTvCity.setText(city);}areaList = mCityInfoBean.getCity().get(position).getArea();initArea();}});}private void initArea() {mRvProvince.setVisibility(View.GONE);mRvCity.setVisibility(View.GONE);mRvArea.setVisibility(View.VISIBLE);mAreaAdapter = new AreaAdapter(areaList);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);linearLayoutManager.setOrientation(RecyclerView.VERTICAL);mRvArea.setLayoutManager(linearLayoutManager);mRvArea.setAdapter(mAreaAdapter);mAreaAdapter.setOnItemListener(new AreaAdapter.onItemClick() {@Overridepublic void onClick(int position, String name) {if (TextUtils.isEmpty(area)) {area = name;mTvArea.setVisibility(View.VISIBLE);mTvArea.setText(area);mLlSelect.setVisibility(View.GONE);citySelect.onSelect(province, city, area);dismiss();}}});}public interface onCitySelect {void onSelect(String province, String city, String area);}
}
3.在activity里调用
package com.miles.zcstc.fingerdemo;import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.PopupWindow;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {TextView mTvSlect;TextView mTvCity;JDCityPicker mJDCityPicker;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTvSlect = findViewById(R.id.tv_select);mTvCity = findViewById(R.id.tv_city_pick);mTvSlect.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {bgAlpha(0.7f);mJDCityPicker = new JDCityPicker(MainActivity.this, new JDCityPicker.onCitySelect() {@Overridepublic void onSelect(String province, String city, String area) {mTvCity.setText(province + " " + city + " " + area);}});mJDCityPicker.showAtLocation(mTvSlect, Gravity.BOTTOM, 0, 0);mJDCityPicker.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {bgAlpha(1.0f);}});}});}//背景变暗private void bgAlpha(float f) {WindowManager.LayoutParams layoutParams = getWindow().getAttributes();layoutParams.alpha = f;getWindow().setAttributes(layoutParams);}
}
代码在git上,有不明白的,看一下源码
git地址
Android仿京东收货地址相关推荐
- 仿京东收货地址三级联动
声明 我没有用tabLayout(pageSlidingTabStrip) + viewpager + fragment 如果用上面的方法实现 更加简单 我用的是 一个listvi ...
- 用jQuery仿京东收货地址
代码优化及修正说明,新增两个功能,第一.指定parentId[用于筛选对应数据的根节点数],第二.返回所选择的数据数据及创建的class名称[用于重新绑定点击事件].代码实例及创建代码如下: < ...
- 基于uni-app实现京东收货地址
本文是用uni-app来实现收货地址城市选择,如果你想要用jquery实现相同效果可以查看我之前写的文章,用jQuery仿京东收货地址.本次的功能实现相比用jquery会比较简单,关键在于我们对缓存数 ...
- android 京东收货地址,手机京东商城怎么添加收货地址?
想必有很多人都使用过手机京东购物,购物就需要一个收货地址,在手机京东上,具体怎么添加一个收货地址呢?或者说,由于某些特殊的原因,比如帮别人买东西,或者自己不在原来的地方住了,需要修改原来的收货地址,这 ...
- android 收获地址管理,android UiAutomator添加收货地址的用例
本人在学习UiAutomator的时候,遇到添加收获地址的测试用例,这里的地址的地区是一级一级选择的.所以写了一个随机选择的方法.分享出来,供大家参考. public void addAdress() ...
- php商城手机端省市显示,jQuery仿手机京东商城收货地址城市选择
jQuery仿手机京东商城收货地址城市选择 js代码 /** * 默认调用 */ !function () { var $target = $('#J_Address'); $target.cityS ...
- 39 Flutter仿京东商城项目 收货地址列表、增加 修改收货地址布局、弹出省市区选择器...
加群452892873 下载对应39课文件,运行方法,建好项目,直接替换lib目录 pubspec.yaml city_pickers: ^0.1.22 AddressAdd.dart import ...
- ionic4.x仿京东 - 10.3.4.收货地址-修改默认收货地址、显示默认收货地址
一.修改默认收货地址 1.接口信息 请求方式:post 地址:域名/api/changeDefaultAddress 传参说明: 参数 说明 备注 uid 用户 id 必传 sign 签名 验证地址是 ...
- 云炬Android开发笔记 14 个人中心、图片裁剪、图片上传、收货地址、消息推送、权限管理等功能开发与一键式封装
阅读目录 0.优化 1.个人中心页面的布局 2. 订单列表逻辑梳理与实现 3. 个人信息的更新实现 3.1 个人信息页面的布局 3.3 数据的转化 5.3 图片库中图片选择事件的处理 5.4 相机 ...
最新文章
- MikuMikuDance 6 菜单汉化补丁
- 智能传感器深度报告:未来机器感官的百亿美元市场【附下载】
- 大盘过4000,注意风险~
- 1、在Centos上安装Grafana
- **PHP foreach 如何判断为数组最后一个最高效?
- 转载 用ShadowVolume画模型的影子
- MVC是一种用于表示层设计的复合设计模式
- MapReduce:简单介绍
- 只进ResultSet 不支持请求的操作
- 弹性负载均衡:负载无限,均衡有道【华为云分享】
- (41)时钟组Clock Group介绍
- Memcached内存分配机制
- 台式机装苹果系统_苹果电脑macbook装windows系统U盘启动的详细方法
- ssm+vue基本微信小程序的校园二手商城系统 计算机毕业设计
- Hive学习使用一周感悟
- hdu 2094 “产生冠军“
- python机器学习基础05——sklearn之逻辑回归+分类评价指标
- 保存数据的时候报类型错误的原因和解决方案
- OSI七层模型与TCP/IP模型
- 优酷 YouTube Twitter及JustinTV视频网站架构设计笔记