HarmonyOS Refresh跟list组件惯性滑动问题

Refresh组件嵌套List组件的时候。 如果在List组件里面惯性滑动会直接分发给Refresh触发下拉刷新

HarmonyOS
6h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

单纯使用Scroll + List嵌套时, 存在滑动冲突可直接定义nestedScroll并固定List高度解决, 当在中间嵌套Refresh后, 如果List填充满Refresh组件时不存在滑动冲突,如果list不填充满则会引起滑动冲突

@Entry
@Component
struct scroll {
  @State fakeDataSource: string[] = [
    'start',
    'aaa', 'bbb', 'ccc', 'ddd', 'eee',
    'aaa11', 'bbb', 'ccc', 'ddd', 'eee11',
    'aaa22', 'bbb', 'ccc', 'ddd', 'eee22',
    'aaa33', 'bbb', 'ccc', 'ddd', 'eee33',
    'aaa44', 'bbb', 'ccc', 'ddd', 'eee44',
    'end'
  ]
  @State refreshing: boolean = false
  refresh() {
    setTimeout(() => {
      this.fakeUpdateData()
      this.refreshing = false
    }, 1000)
  }

  private flag = false
  fakeUpdateData() {
    if (this.flag) {
      this.fakeDataSource = [
        'start',
        'aaa', 'bbb', 'ccc', 'ddd', 'eee',
        'aaa11', 'bbb', 'ccc', 'ddd', 'eee11',
        'aaa22', 'bbb', 'ccc', 'ddd', 'eee22',
        'aaa33', 'bbb', 'ccc', 'ddd', 'eee33',
        'aaa44', 'bbb', 'ccc', 'ddd', 'eee44',
        'end'
      ]
    } else {
      this.fakeDataSource = [
        'start',
        'aaa', 'bbb', 'ccc', 'ddd', 'eee',
        'end'
      ]
    }
    this.flag = !this.flag
  }

  build() {
    Column() {
      Scroll() {
        Column() {
          Blank()
            .width('100%')
            .height(150).backgroundColor(0x33ff0000)
          Refresh({ refreshing: $$this.refreshing }) {
            List() {
              ForEach(this.fakeDataSource, (value: string) => {
                ListItem() {
                  Text(value)
                    .width('100%')
                    .height(50)
                    .backgroundColor(Color.White)
                }
              })
            }
            .scrollBar(BarState.Off)
            .nestedScroll({
              scrollForward: NestedScrollMode.PARENT_FIRST,
              scrollBackward: NestedScrollMode.SELF_FIRST
            })
            // list组件在小于一屏的时候是会让手势失效,需加上底下这一行代码
            .edgeEffect(EdgeEffect.None, { alwaysEnabled: true })
            .divider({ strokeWidth: 1 })
            .height(790)
          }
          .backgroundColor(0x110000ff)
          .onRefreshing(() => {
            this.refresh()
          })
        }
      }
      .layoutWeight(1)
      .scrollBar(BarState.Off)
      .backgroundColor(0x11000000)
    }

  }
}
分享
微博
QQ
微信
回复
3h前
相关问题
HarmonyOS list滑动问题
809浏览 • 1回复 待解决
HarmonyOS Refresh组件嵌套滑动冲突问题
963浏览 • 1回复 待解决
HarmonyOS 嵌套滑动问题
337浏览 • 1回复 待解决
HarmonyOS scroll滑动问题
451浏览 • 1回复 待解决
HarmonyOS Slider滑动问题
344浏览 • 1回复 待解决
TabContent内web组件滑动问题
236浏览 • 2回复 待解决
列表滑动惯性处理问题
275浏览 • 1回复 待解决
HarmonyOS Tabs和Web嵌套左右滑动问题
336浏览 • 1回复 待解决
refresh + scroll+list嵌套问题
372浏览 • 1回复 待解决
仿射变换后列表滑动问题
274浏览 • 1回复 待解决
HarmonyOS Grid组件子项拖动问题
179浏览 • 1回复 待解决
HarmonyOS Scroll组件动问题
548浏览 • 1回复 待解决
HarmonyOS list 嵌套web滑动切换问题
472浏览 • 1回复 待解决
HarmonyOS如何去掉List组件滑动线
896浏览 • 1回复 待解决
HarmonyOS list组件如何设置匀速滑动
1浏览 • 1回复 待解决
Canvas制作图表如何实现滑动惯性
441浏览 • 1回复 待解决
HarmonyOS Tabs组件的Tab栏滚动问题
531浏览 • 1回复 待解决
HarmonyOS LongPressGesture手势移动问题
471浏览 • 1回复 待解决
HarmonyOS 悬浮按钮拖动问题
347浏览 • 1回复 待解决