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仿京东收货地址相关推荐

  1. 仿京东收货地址三级联动

    声明 我没有用tabLayout(pageSlidingTabStrip) + viewpager  + fragment 如果用上面的方法实现 更加简单         我用的是  一个listvi ...

  2. 用jQuery仿京东收货地址

    代码优化及修正说明,新增两个功能,第一.指定parentId[用于筛选对应数据的根节点数],第二.返回所选择的数据数据及创建的class名称[用于重新绑定点击事件].代码实例及创建代码如下: < ...

  3. 基于uni-app实现京东收货地址

    本文是用uni-app来实现收货地址城市选择,如果你想要用jquery实现相同效果可以查看我之前写的文章,用jQuery仿京东收货地址.本次的功能实现相比用jquery会比较简单,关键在于我们对缓存数 ...

  4. android 京东收货地址,手机京东商城怎么添加收货地址?

    想必有很多人都使用过手机京东购物,购物就需要一个收货地址,在手机京东上,具体怎么添加一个收货地址呢?或者说,由于某些特殊的原因,比如帮别人买东西,或者自己不在原来的地方住了,需要修改原来的收货地址,这 ...

  5. android 收获地址管理,android UiAutomator添加收货地址的用例

    本人在学习UiAutomator的时候,遇到添加收获地址的测试用例,这里的地址的地区是一级一级选择的.所以写了一个随机选择的方法.分享出来,供大家参考. public void addAdress() ...

  6. php商城手机端省市显示,jQuery仿手机京东商城收货地址城市选择

    jQuery仿手机京东商城收货地址城市选择 js代码 /** * 默认调用 */ !function () { var $target = $('#J_Address'); $target.cityS ...

  7. 39 Flutter仿京东商城项目 收货地址列表、增加 修改收货地址布局、弹出省市区选择器...

    加群452892873 下载对应39课文件,运行方法,建好项目,直接替换lib目录 pubspec.yaml city_pickers: ^0.1.22 AddressAdd.dart import ...

  8. ionic4.x仿京东 - 10.3.4.收货地址-修改默认收货地址、显示默认收货地址

    一.修改默认收货地址 1.接口信息 请求方式:post 地址:域名/api/changeDefaultAddress 传参说明: 参数 说明 备注 uid 用户 id 必传 sign 签名 验证地址是 ...

  9. 云炬Android开发笔记 14 个人中心、图片裁剪、图片上传、收货地址、消息推送、权限管理等功能开发与一键式封装

    阅读目录 0.优化 1.个人中心页面的布局 2. 订单列表逻辑梳理与实现 3. 个人信息的更新实现 3.1 个人信息页面的布局 3.3 数据的转化  5.3 图片库中图片选择事件的处理  5.4 相机 ...

最新文章

  1. MikuMikuDance 6 菜单汉化补丁
  2. 智能传感器深度报告:未来机器感官的百亿美元市场【附下载】
  3. 大盘过4000,注意风险~
  4. 1、在Centos上安装Grafana
  5. **PHP foreach 如何判断为数组最后一个最高效?
  6. 转载 用ShadowVolume画模型的影子
  7. MVC是一种用于表示层设计的复合设计模式
  8. MapReduce:简单介绍
  9. 只进ResultSet 不支持请求的操作
  10. 弹性负载均衡:负载无限,均衡有道【华为云分享】
  11. (41)时钟组Clock Group介绍
  12. Memcached内存分配机制
  13. 台式机装苹果系统_苹果电脑macbook装windows系统U盘启动的详细方法
  14. ssm+vue基本微信小程序的校园二手商城系统 计算机毕业设计
  15. Hive学习使用一周感悟
  16. hdu 2094 “产生冠军“
  17. python机器学习基础05——sklearn之逻辑回归+分类评价指标
  18. 保存数据的时候报类型错误的原因和解决方案
  19. OSI七层模型与TCP/IP模型
  20. 优酷 YouTube Twitter及JustinTV视频网站架构设计笔记

热门文章

  1. 微信公众号一次性订阅消息
  2. Excel的一些函数操作
  3. 同样是IT行业,测试和开发薪资真有这么大差别?
  4. JavaWeb开发与代码的编写(一)
  5. javascript--经典实例锦集
  6. 常见未授权访问漏洞详解
  7. 字节跳动一道Python面试题
  8. 最全iOS 应用上架流程(提交到AppStore)
  9. ijkplayer编译生成aar,支持https,rtsp,录制与截图
  10. python实现网站测速软件_网站测速插件是什么-和网站测速插件相关的问题-阿里云开发者社区...