加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

有没有办法更新反应原生ListView数据源,以便它不重置滚动位置?

发布时间:2020-12-15 20:48:34 所属栏目:百科 来源:网络整理
导读:我有一个获取初始DataSource的ListView.然后,用户可以运行搜索,该搜索将使用新的DataSource更新ListView.不幸的是,当发生这种情况时,滚动位置会重置,这并不理想. 我尝试重用相同的ListView.DataSource对象而不是创建一个新对象,但这给了我相同的结果: ...da
我有一个获取初始DataSource的ListView.然后,用户可以运行搜索,该搜索将使用新的DataSource更新ListView.不幸的是,当发生这种情况时,滚动位置会重置,这并不理想.

我尝试重用相同的ListView.DataSource对象而不是创建一个新对象,但这给了我相同的结果:

...

dataSource: new ListView.DataSource({
  rowHasChanged: (r1,r2) => r1 !== r2
}),componentWillReceiveProps(nextProps) {
this.setState({
  dataSource: this.dataSource.cloneWithRowsAndSections({...});
}

...

我在dataSource更改后尝试在ListView上使用scrollTo,但这会让应用程序跳转很多……不是很好的体验.是否有ListView设置或更新dataSource的不同方法,以防止滚动位置重置?

ListView有2个粘性标题,顶部标题有2行页面描述和一个呈现3个图像网格的redux容器.第二部分是最多50个组件的列表,这些组件的渲染有点重:正方形图像,一些文本和一些SVG.我当前的方法使用onContentSizeChange强制滚动位置,但这会导致滚动位置跳跃,它看起来很业余.

更新:深入研究ListView的文档和源代码,最终只需渲染ScrollView.我可以使用contentOffset来设置初始滚动位置,但是当ListView DataSource更新时它似乎没有帮助;甚至硬编码contentOffset也无济于事.我也尝试将scrollEnabled设置为false,这确实阻止了用户驱动的滚动,但是当它的DataSource更新时,ListView滚动位置仍然被重置:s

更新2:我做了一些进一步的调试,发现建议的rowHasChange和sectionHeaderHasChanged函数在只渲染需要渲染的行/节头方面做得相当不错.

您可以保存滚动位置,并在将新道具设置为ListView后 – 使scrollTo无动画

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读