ArkTs 复用并引用@Builder方法@Builder @BuilderParam(传入的方法带有参数输入)

主要是传入的参数要对,不然会出现奇奇怪怪的问题而且还不报错,以此记下一是提醒以后的自己,二是希望帮到有缘人(学艺不精还望海涵

相关资料:文档中心

 先是错误代码

@Component
export default struct DetailsData {


  @Builder countMonthsCard(item:number){
......
  }



build() {
    Column(){

......

    RowCountScrollList({
        countList: this.months , 
        customBuilderParam: this.countMonthsCard
        //这里 customBuilderParam: this.countMonthsCard 传入的参数错了
    })

...
        }        
    }
}


//自定义横向滑动组件
@Component
struct RowCountScrollList {
  @Prop countList: number[] = [];
  @Builder customBuilder() {}

  @BuilderParam
  customBuilderParam: (item: number) => void = this.customBuilder;

....
              ForEach(this.countList, (item: number, index: number) => {
                this.customBuilderParam(item);
            });
....




......
}


这里 customBuilderParam: this.countMonthsCard 传入的参数错了,本来我写的是this.countMonthsCard(item:number)然后就报错了,后来传入的才是上面的但是显示数据只有数组的第一个元素然后我把countlist直接换成了一个数组输入进去又可以正常显示整个数组。这时候我应该就意识到是数据传输方面的问题了,但是我又搞了好久。最后呈现一下正确代码,展示一下如何正确传输有参数传入的@Builder方法。
 

@Component
export default struct DetailsData {

  @State months:number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
  @State days: number[]=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];


    //需要传入的@Builder方法
  @Builder countMonthsCard(item:number){
....
  }


  @Builder countDaysCard(item:number){
.....
  }



  build() {
    Column(){
       //这里用我代码原有的两个@Builder方法传入

      //月份
      // 初始化一个 RowCountScrollList 实例
      // 并且传递两个参数:
      RowCountScrollList({
        // 第一个参数是 countList,它被赋值为 this.months(即当前实例的一个属性)
        countList: this.months,
        // 第二个参数是 customBuilderParam,它被赋值为一个箭头函数
        // 这个函数接收一个名为 item 的数字参数,并且调用当前实例的 countMonthsCard 方法,传入 item 作为参数
        customBuilderParam: (item: number): void => this.countMonthsCard(item)
      })
        .margin({bottom:'20vp'})


      //日期
      RowCountScrollList({
        countList:this.days,
        customBuilderParam:(item:number): void => this.countDaysCard(item)
       })

    }

  }
}


//自定义横向滑动组件
@Component
struct RowCountScrollList {
  @Prop countList: number[] = [];
  scroller: Scroller = new Scroller();
  @Builder customBuilder() {}

  @BuilderParam
  customBuilderParam: (item: number) => void = this.customBuilder;


  build() {
    Row() {
      Stack({ alignContent: Alignment.TopStart }) {
        Scroll(this.scroller) {
          Row({space: 20}) {
            ForEach(this.countList, (item: number, index: number) => {
                this.customBuilderParam(item);
            });
          }
        }
        .scrollable(ScrollDirection.Horizontal)
        .scrollBar(BarState.Off)
        .scrollBarColor(Color.Gray)
        .scrollBarWidth(5)
        .onScroll((xOffset: number, yOffset: number) => {
          console.info(xOffset + ' ' + yOffset);
        })
        .onScrollEdge((side: Edge) => {
          console.info('To the edge');
        })
        .onScrollEnd(() => {
          console.info('Scroll Stop');
        })
        .onScrollStart(() => {
          console.info('Scroll Start');
        });
      }
    }
  }
}

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
StaticLayout.Builder是用来构建StaticLayout对象的工具类,可以通过设置一些参数来创建StaticLayout对象。下面是一个示例代码,演示了如何使用StaticLayout.Builder: ```java // 创建一个StaticLayout.Builder对象 StaticLayout.Builder builder = StaticLayout.Builder.obtain(text, start, end, paint, width); // 设置一些参数 builder.setAlignment(Layout.Alignment.ALIGN_NORMAL); // 对齐方式 builder.setIncludePad(false); // 是否包含padding builder.setLineSpacing(0f, 1.2f); // 行间距 builder.setEllipsize(TextUtils.TruncateAt.END); // 省略号位置 builder.setMaxLines(2); // 最大行数 // 构建StaticLayout对象 StaticLayout staticLayout = builder.build(); ``` 在上面的代码中,我们使用StaticLayout.Builder创建了一个StaticLayout对象。具体的步骤如下: 1. 调用StaticLayout.Builder.obtain方法创建一个StaticLayout.Builder对象,该方法需要传入一些参数,包括要显示的文本text,文本的起始位置start和结束位置end,用于显示文本的Paint对象paint,以及TextView的宽度width。 2. 设置StaticLayout.Builder的一些参数,比如对齐方式、是否包含padding、行间距、省略号位置以及最大行数等。 3. 调用StaticLayout.Builderbuild方法构建StaticLayout对象,该方法会返回一个StaticLayout对象。 值得注意的是,StaticLayout.Builder是一个可复用的对象,可以通过调用obtain方法获取到一个实例,避免了重复创建对象的开销。 另外,StaticLayout.Builder参数设置非常灵活,可以根据具体的需求来设置。在设置参数时,需要注意一些细节,比如行间距的单位是像素而不是dp,最大行数需要考虑到省略号的位置等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值