HarmonyOS 地区选择器多级列表效果

地址选择有定位时,初始根节点为所在省市,否则初始根节点为空,显示全国各省等。选择后,依次展开市县区等并且期望平滑效果,需要Demo。

HarmonyOS
2024-10-21 11:39:12
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

请参考下代码:

@Observed  
class StringArray extends Array<String> {  
}  
  
const cityData: string[][] = [['辽宁省', '吉林省', '黑龙江省'], ['沈阳市', '大连市', '长春市'], ['东安区', '西安区', '爱民区'], ['东安区', '西安区', '爱民区'], ['东安区', '西安区', '爱民区']]  
  
@Entry  
@Component  
struct TabsExample6 {  
  private controller: TabsController = new TabsController()  
  @State titleArray: Array<string> = ['请选择']  
  @State arr: Array<StringArray> = [];  
  
  aboutToAppear(): void {  
    this.arr.push(['辽宁省', '吉林省', '黑龙江省']);  
  }  
  
  build() {  
    Column() {  
      Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {  
        ForEach(this.arr, (itemArr: StringArray, index: number) => {  
          TabContent() {  
            Column() {  
              ForEach(itemArr, (item: string) => {  
                ListItem() {  
                  Row(){  
                    Text(item).fontSize(16).width('80%').align(Alignment.Start)  
                      .fontColor(this.titleArray[index] === item ? '#007DFF' : '#182431')  
                  }  
                }  
                .width('80%').height(30).onClick(() => {  
                  if (this.titleArray[index] != item) {  
                    this.titleArray[index] = item;  
                    if (index < cityData.length - 1) {  
                      this.titleArray.splice(index + 1)  
                      this.titleArray.push("请选择")  
                      this.arr.splice(index + 1)  
                      this.arr.push(cityData[index + 1])  
  
                      setTimeout(() => {  
                        this.controller.changeIndex(index + 1)  
                      }, 100);  
                    }  
                  }  
                })  
              }, (item: string) => item)  
            }.height("100%").width("100%")  
          }  
          .tabBar(this.titleArray[index])  
        }, (item: string) => item)  
      }  
      .vertical(false)  
      .scrollable(true)  
      .barMode(BarMode.Scrollable)  
      .barHeight(80)  
      .animationDuration(200)  
      .onChange((index: number) => {  
        console.info(index.toString())  
      })  
    }  
  }  
}
分享
微博
QQ
微信
回复
2024-10-21 16:52:02
相关问题
HarmonyOS图片选择器相关的问题
390浏览 • 1回复 待解决
HarmonyOS 日期/日历/时间选择器开发
404浏览 • 1回复 待解决
TimePicker如何设置时间选择器的范围?
6869浏览 • 1回复 待解决
根据地区名字开头首字母选择地区
685浏览 • 1回复 待解决
自定义日期滑动选择器弹窗
332浏览 • 1回复 待解决
鸿蒙可以实现状态选择器吗?
6187浏览 • 1回复 已解决
如何实现列表页的单选效果
2401浏览 • 0回复 待解决
HarmonyOS如何实现阅读翻页效果
211浏览 • 1回复 待解决