ability_main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:alignment="center"
ohos:orientation="horizontal">
<Picker
ohos:id="$+id:province"
ohos:height="match_content"
ohos:width="100vp"
ohos:normal_text_size="20fp"
ohos:selected_text_size="20fp"
ohos:value="0"/>
<Picker
ohos:id="$+id:city"
ohos:height="match_content"
ohos:width="100vp"
ohos:left_margin="10vp"
ohos:normal_text_size="20fp"
ohos:selected_text_size="20fp"
ohos:value="0"/>
<Picker
ohos:id="$+id:district"
ohos:height="match_content"
ohos:width="100vp"
ohos:left_margin="10vp"
ohos:normal_text_size="20fp"
ohos:selected_text_size="20fp"
ohos:value="0"/>
</DirectionalLayout>
建一个省的javabean类,记录省份名字和包含的市
package com.example.pickerapplication.domain;
import java.util.ArrayList;
public class Province {
//1.省份名字
private String name;
//2.集合,记录省份里面所有城市的名字
private ArrayList<String> list;
public Province() {
}
public Province(String name, ArrayList<String> list) {
this.name = name;
this.list = list;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList<String> getList() {
return list;
}
public void setList(ArrayList<String> list) {
this.list = list;
}
}
MainAbilitySlice.java代码:
package com.example.pickerapplication.slice;
import com.example.pickerapplication.ResourceTable;
import com.example.pickerapplication.domain.Province;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Picker;
import java.util.ArrayList;
public class MainAbilitySlice extends AbilitySlice implements Picker.ValueChangedListener {
Picker province;
Picker city;
Picker district;
ArrayList<Province> provinceList;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1.找到三个组件
province = (Picker) findComponentById(ResourceTable.Id_province);
city = (Picker) findComponentById(ResourceTable.Id_city);
district = (Picker) findComponentById(ResourceTable.Id_district);
//2.创建集合,存储省市区
//省市的联动
provinceList = getData();
//3.给三个滑动选择设置默认显示数据
//要告诉滑动选择器最大值选择多少
province.setMaxValue(provinceList.size() - 1);
//暂时只给前面的省市设置
province.setFormatter(i -> provinceList.get(i).getName());
//要告诉滑动选择器最大值选择多少
city.setMaxValue(provinceList.get(0).getList().size() - 1);
city.setFormatter(i -> provinceList.get(0).getList().get(i));
//给picker滑动选择器绑定监听
province.setValueChangedListener(this);
}
//参数一:表示当前数据变动的那个滑动选择器对象
//参数二:旧值(原来选择的值)
//参数三:新值(现在选择的值)
@Override
public void onValueChanged(Picker picker, int oldValue, int newValue) {
if (picker == province) {
//判断当前选择是那个省
//选择哪个省,就把当前省对应的市设置到第二个滑动选择器
//获取到当前省份的对象
Province chooseProvince = provinceList.get(newValue);
//设置城市的滑动选择器
city.setMaxValue(chooseProvince.getList().size() - 1);
city.setFormatter(i -> chooseProvince.getList().get(i));
//当前面更换省份的时候,中间的城市从第一个展示
city.setValue(0);
}
}
//在以后,这些数据不需要手动书写,一般是服务器传递过来
public ArrayList<Province> getData() {
//创建一个集合存储所有省份
ArrayList<Province> provinceList = new ArrayList<>();
//创建一个江苏省的集合,存储所有城市
ArrayList<String> jiangSuCitys = new ArrayList<>();
jiangSuCitys.add("南京市");
jiangSuCitys.add("苏州市");
jiangSuCitys.add("无锡市");
jiangSuCitys.add("扬州市");
jiangSuCitys.add("徐州市");
ArrayList<String> zheJiangCitys = new ArrayList<>();
zheJiangCitys.add("杭州市");
zheJiangCitys.add("宁波市");
zheJiangCitys.add("温州市");
zheJiangCitys.add("绍兴市");
zheJiangCitys.add("嘉兴市");
zheJiangCitys.add("舟山市");
ArrayList<String> fuJianCitys = new ArrayList<>();
fuJianCitys.add("福州市");
fuJianCitys.add("厦门市");
fuJianCitys.add("泉州市");
fuJianCitys.add("莆田市");
fuJianCitys.add("宁德市");
fuJianCitys.add("龙岩市");
//添加省份到provinceList
provinceList.add(new Province("江苏省", jiangSuCitys));
provinceList.add(new Province("浙江省", zheJiangCitys));
provinceList.add(new Province("福建省", fuJianCitys));
//把存储所有省份的集合返回
return provinceList;
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
结果演示:
省市区三级联动只要再把区嵌套到市里面即可,思路一样