React Native's onScroll, onScrollEndDrag, onScrollBeginDrag supported on Android?

有些话、适合烂在心里 提交于 2019-12-12 20:15:11

问题


I have a few simple console.log statements in onScrollBeginDrag, onScroll, and onScrollEndDrag attached to a ScrollView. I can see that they work as expected on my iOS device, but they are not working on an Android emulator.

This raises the question, are these props only supported on iOS or is there a problem with Android emulator?

the code is as simple as:

onScroll={() => console.log("scroll")}
onScrollBeginDrag={() => console.log("begin")}
onScrollEndDrag={() => console.log("end")}

回答1:


I am using onScrollBeginDrag in a FlatList, react-native 0.59.9, and, as you say, it does't work on an android emulator (tested on genymotion, android 7).

It does work, however, on a smartphone running android 8, so there is a way to use it...




回答2:


Yes, they are supported, but they have issues...

I assume you use a <FlatList /> to render your components, correct?

If so, your issue is most probably caused by the <View /> containing your <FlatList /> items being optimized away by Android. Android automatically removes 'wrapping' views that do not actually render any content, such as a background color or borders. This optimization helps to reduce the depth of the view hierarchy but can cause unexpected results in some cases (such as this)...

I've added a transparent backgroundColor to the wrapping <View /> of the items and now the onScrollBeginDrag, onScrollEndDrag and onScroll events of the <FlatList /> are firing as expected!

<FlatList
  onScrollBeginDrag={() => console.log('begin')}
  onScrollEndDrag={() => console.log('end')}
  onScroll={() => console.log('end')}
  data={[{key: 'a'}, {key: 'b'}]}

  renderItem={({ item }) => (
    <View style={{ backgroundColor: 'transparent' }}>
      <Text>{item.key}</Text>
    </View>
  )}
/>

I also removed the FlatList paddings and I added some paddings to the wrapping view, which makes the touchable area larger.

PS: Kudos to Bartol Karuza.



来源:https://stackoverflow.com/questions/55940600/react-natives-onscroll-onscrollenddrag-onscrollbegindrag-supported-on-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!