#reactjs #react-native
#reactjs #react-native
Вопрос:
[React Native android] Любой орган знает, как заставить listview прокручиваться, когда он встроен в scrollview? Это работает для iOS, но не работает для Android.
<ScrollView>
<Text>test1</Text>
<Text>test2<Text>
<ListView/>
<scrollview>
Ответ №1:
Это неправильный путь. Даже если вам удастся заставить это работать, это плохая практика. Помните, что основное различие между ScrollView и ListView заключается в том, что ListView отображает только видимые элементы и перерабатывает их для оптимизации использования памяти. Добавляя ListView в ScrollView, вы, скорее всего, «саботируете» эту функцию.
Вместо того, чтобы пытаться добавить ListView в ScrollView, используйте только ListView с элементами другого типа. Что-то вроде:
export default class MyListComponent extends Component {
constructor(props) {
super(props);
const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
this.state = {
dataSource: ds.cloneWithRows(this.props.data)
};
}
render() {
return (
<ListView
enableEmptySections={true}
dataSource={this.state.dataSource}
renderRow={(rowData) => this._getViewForType(rowData)}/>
);
}
_getViewForType(rowData) {
switch (rowData.renderType) {
case 'type1':
return <Text>test1</Text>
case 'type2':
return <Text>test2</Text>
default:
// Render your normal/default listview item here.
return ...
}
}
}
Теперь, прежде чем отображать это представление, вам просто нужно добавить два дополнительных элемента в свой список элементов: один типа «type1» и другой типа «type2».
Комментарии:
1. Потрясающе! Большое вам спасибо!
2. Еще один вопрос, если в scrollview у нас есть некоторый вводимый текст и одна кнопка, когда я нажимаю кнопку, я хочу открыть и закрыть listview (высота равна 200 и доступна для прокрутки). Как я могу сделать?
3. Вам нужно будет изменить состояние компонента с помощью
setState()
. Это вызывает еще один вызов функции компонентаrender()
. Затем вrender()
вы можете проверить состояние и на его основе вы можете показать / скрыть дочерние компоненты.4. то, что я хочу, находится в scrollview, есть некоторый вводимый текст и одна кнопка, когда я нажимаю кнопку, отображается listview (высота: 200) под кнопкой. Но теперь listview не может прокручиваться. (Причина, по которой я делаю rootview как scrollview, заключается в том, что клавиатура будет скрывать содержимое, если inputText сфокусирован. ) Любые идеи по этому поводу, использовать только ListView с элементами другого типа, похоже, не работает (мой тип элемента — другой listview).