2017-04-13 7 views
8

Ich arbeite gerade an einer reaktiven nativen App für Android und habe Zugriff auf die neue FlatList. Es hat einige sehr wichtige Funktionen. Meine ListView wird jedoch mit der react-native-inverterable-scroll-Ansicht invertiert. Dies scheint mit FlatList nicht richtig zu funktionieren. Das Scrollen wird nicht korrekt umgekehrt.Invertieren einer FlatList

Kann jemand eine FlatList invertieren? Oder vielleicht, wie man eine Flatlist lädt und dann eine Schriftrolle nach unten drückt, ohne dass der Benutzer es merkt? Meine eigenen Versuche, eine Schriftrolle zu erzwingen, verzögern sich oft.

Antwort

12
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>) 

Genießen Sie es)

+0

Arbeitete! Danke Богдан :-) – Francesco

+0

das hat wie ein Zauber funktioniert. – Lorenz

+0

Ich frage mich, ob Sie irgendwelche Kommentare dazu mit Android-Funktionalität gehabt haben? Wir verwenden dies in unserem Produktions-Chat und die Liste funktioniert nicht auf dem Huwaii Honor 8 Telefon, aber die meisten anderen sind in Ordnung. –

-3

Wie in den anderen Antworten beschrieben, zur Zeit den besten Weg, um dies zu tun zu gehen, ist eine Transformation in den enthaltenden Ansicht des FlatList anzuwenden, die es invertiert.

Wenden Sie dann die gleiche Umwandlung auf jedes Listenelement an, um sicherzustellen, dass sie korrekt neu ausgerichtet sind.

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

Ich habe ein Paket geschrieben, das genau das tut, alles, was Sie tun müssen, ist dies eine Standard FlatList Komponenten anstelle verwenden und die inverted Eigenschaft übergeben.

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

+0

irgendwelche Ideen, wie man auch den Pull-to-Refresh zusammen mit dem Inhalt invertieren? In einer Chat-Anwendung müssen Sie frühere Nachrichten ganz oben laden. Mit dieser Lösung fügt FlatList onRefresh das RefreshControl ganz unten hinzu. – mitelone

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/16424795) –

+0

@mitelone sind Sie davon positiv? Ich habe das in meiner eigenen Anwendung verwendet, habe es nicht gründlich getestet, aber bei einer kurzen Inspektion sieht es so aus, als wäre das RefreshControl ganz oben. Wenn dies tatsächlich der Fall ist, dass es auf der Unterseite hinzugefügt wird, habe ich keine großartigen Ideen, wie man es umdreht. Ich werde nach einigen Tests daran denken. – nickcharles

20

Dies nun aus der Box in FlatList kommt!

Verwenden Sie einfach:

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

Dies bewirkt, dass das erste Element am Ende der Liste angezeigt werden, und die Liste beginnt am unteren Ende, das erste Element zeigt.

Wenn Sie das letzte Element benötigen, das unten angezeigt wird, kehren Sie einfach das Array um, das Sie in der data Prop bereitstellen.

+1

Dies sollte die angenommene Antwort sein – Khriz

+0

vielen Dank kann ich rtl meine horizontale Liste mit Ihrer vorschlagen. Vielen Dank –

Verwandte Themen