Ich versuche, die List-Komponente verwenden, um eine Menge Eingaben zu verarbeiten, aber beachten Sie, dass es nach Eingabe der Eingabe nach oben zurück scrollt.NativeBase (React Native) vermeiden Scrollen nach oben
Sie wissen nicht, ob dies zu ListView always scrolls back to the top in react-native verwandt ist - Ich habe versucht, <List style={{flex> 1}} ..>
aber kein Glück ..
UPDATE
dachte, es könnte leichter sein, mir zu helfen, wenn ich werfe in einigen Code
import React, { Component } from 'react'
import { View } from 'react-native'
import { List, ListItem, InputGroup, Input, Icon, Button } from 'native-base'
export default class AddInformation extends Component {
constructor(props) {
super(props)
this.state = {
items:
[
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"},
{value: "", keyboardType: "default"}]}
}
render() {
return (
<List
dataArray={this.state.items}
renderRow={
(obj) => {
console.log(obj)
return (
<ListItem>
<InputGroup>
<Input
placeholder={`${obj.keyboardType} keyboard`}
onChangeText={ (text)=> {
//TODO
} }
keyboardType={obj.keyboardType}
/>
</InputGroup>
</ListItem>
)
}}>
</List>
)
}
}
UPDATE 2
noch nicht funktioniert ..
import React, { Component } from 'react'
import { View, ListView, Text, TextInput } from 'react-native'
import { FormLabel, FormInput } from 'react-native-elements'
export default class AddInformation extends Component {
constructor(props) {
super(props)
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
}
componentDidMount() {
this.state = {
items: ds.cloneWithRows([
{hint: "foo", value: "", keyboardType: "default"},
...
{hint: "bar", value: "", keyboardType: "numeric"}
])
}
}
...
Und die Render-Methode:
render() {
return (
<View style={{flex: 1}}>
<ListView
dataSource={this.state.Specifications}
renderRow={(rowData) =>
<View>
<FormLabel>{rowData.hint}</FormLabel>
<FormInput
placeholder={`Keyboard: ${rowData.keyboardType}`}
/>
<TextInput />
</View>
}/>
</View>
)
}
}
Weiß nicht, ob es etwas mit dem NativeBase Layout zu tun hat ..?
import React, { Component } from 'react'
import { Container, Content, Header, Title, Button, Icon } from 'native-base'
import AddInformation from './AddInformation'
export default class ScreenAddItemInformation extends Component {
render() {
return (
<Container>
<Header>
<Button transparent onPress={() => this.props.navigator.pop() }>
<Icon name='ios-backspace' />
</Button>
<Title>Add New Item</Title>
</Header>
<Content>
<AddInformation />
</Content>
</Container>
);
}
}
UPDATE 3
Ich habe gerade versucht, mit einem NB <List>
harten <ListItem>
und keinem dynamischen Rendering codierte out .. Es ist immer noch das Problem, dass, wenn die Tastatur an die Spitze der „Ansicht“ blättert geht wieder nach unten .
Haben Sie die 'rowHasChanged' korrekt implementiert, so dass die bereits gerenderten Zeilen nicht gerendert werden? –
@TudorConstantin nein ich nicht. Ich verwende NativeBase Dynamische Liste http://nativebase.io/docs/v0.5.13/components#list, die nur ein Array übergeben soll. – Norfeldt
Können Sie Ihren Code dort hinzufügen, wo Sie this.state.items aktualisieren. Tudor Kommentar scheint richtig zu sein. Sie sollten versuchen, ListView direkt anstelle des List-Widgets zu verwenden.Je nachdem, wie Sie den Elementstatus festlegen, wird ListView möglicherweise die gesamte Liste erneut über das Listenwidget wiedergeben. – while1