反转平面列表

Posted

技术标签:

【中文标题】反转平面列表【英文标题】:Inverting a FlatList 【发布时间】:2017-09-09 23:50:57 【问题描述】:

我目前正在开发一个适用于 android 的 react 本机应用程序,并且可以访问新的 FlatList。它有一些非常需要的功能。但是,我的列表视图是使用 react-native-invertable-scroll-view 反转的。这似乎不适用于 FlatList。滚动未正确反转。

有谁知道如何反转 FlatList?或者也许如何加载一个平面列表,然后在用户没有注意到的情况下强制滚动到底部?我自己强制向下滚动的尝试经常被延迟。

【问题讨论】:

【参考方案1】:

这现在在 FlatList 中开箱即用!

只需使用:

<FlatList
  inverted
  data=...
  renderItem=...
/>

这会导致第一个项目出现在列表的底部,并且列表从底部开始,显示第一个项目。

如果您需要在底部显示最后一项,只需反转您在 data 属性中提供的数组即可。

【讨论】:

非常感谢,我可以根据您的建议重新整理我的水平列表。谢谢 完美的描述。非常感谢。 这会导致糟糕的用户体验 完全没有,这取决于你想做什么。如果您正在构建一个聊天应用程序,那么这是有道理的 哦,你救了我的命, 【参考方案2】:
render() 
const messages = this.props.messages.reverse();

return (
  <FlatList
    renderItem=this._renderItem
    data= messages 
    keyExtractor=this._keyExtractor
    style=  transform: [ scaleY: -1 ] 
  />
); 

_keyExtractor = (item, index) => item.id+''+index;

_renderItem = (item) => (
<View style= transform: [ scaleY: -1 ]>
  <ChatItem />
</View>)

享受它)

【讨论】:

成功了!谢谢Богдан :-) 我想知道您是否有任何具有 Android 功能的 cmets?我们在生产聊天中使用它,但列表不适用于华为荣耀 8 手机,但大多数其他手机都可以。 注意上面,你应该调用this.props.messages.slice().reverse(),因为.reverse()会在一些地方修改列表,导致状态、redux等问题。 这行得通,但我认为,这是一个不好的做法,需要获取更多数据来列出 这太神奇了!!为我解决了很多问题。如果数据已经是正确的格式,你也不需要 reverse() 数据。【参考方案3】:

如其他答案中所述,目前最好的方法是对 FlatList 的包含视图应用转换以反转它。

return (
    <View style= transform: [ scaleY: -1 ]  >
        <FlatList
            renderItem=this._renderItem
            ...
        />
    </View>
);

然后对每个列表项应用相同的转换,以确保它们正确重新定向。

_renderItem = (info) => 
    return (
        <View style= transform: [ scaleY: -1 ] >
            this.props.renderItem(info)
        </View>
    );

我已经写了一个包,你需要做的就是用它代替标准的FlatList 组件并传递inverted 属性。

https://www.npmjs.com/package/react-native-invertible-flat-list

【讨论】:

关于如何将下拉刷新与内容一起反转的任何想法?在聊天应用程序中,您需要在顶部加载较早的消息。有了这个方案,FlatList的onRefresh会在底部添加RefreshControl。 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @mitelone 你对此持肯定态度吗?我一直在我自己的应用程序中使用它,尚未彻底测试,但经过简要检查,它看起来 RefreshControl 位于顶部。如果确实是它被添加到底部的情况,我对如何翻转它没有任何好主意。测试后我会考虑的。 @BrunoPeres 感谢您的提示,已编辑答案以包含有关修复技术细节的信息。

以上是关于反转平面列表的主要内容,如果未能解决你的问题,请参考以下文章

案例Python之列表反转

父平面列表项之间的反应原生显示平面列表组件

如何从同一平面列表中的另一个项目更改平面列表中项目的状态?

从平面列表构建分层列表

如何从列表列表中制作平面列表?

python 从列表列表中制作一个平面列表