Реагируйте на родной. listview не может прокручиваться, когда он находится внутри scrollview. (iOS работает, но Android нет)

#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).