HarmonyOS开发46:Picker滑动选择器组件案例

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);
    }


}

结果演示:

请添加图片描述

省市区三级联动只要再把区嵌套到市里面即可,思路一样

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GeniusAng丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值