• ReactNative实现GridView


    ReactNative内置了ListView组件但是没有类似GridView这样的组件。利用一些已经有的属性是可以实现GridView的,利用ContentContainerStyle的属性然后配合样式就可以实现GridView

    import React, {Component} from 'react';
    import {
        StyleSheet,
        Text,
        View,
        ListView,
        TouchableWithoutFeedback
    } from 'react-native';
    const styles = StyleSheet.create({
        contentContainerStyle: {
            flexDirection: 'row',
            flexWrap: 'wrap',
            alignItems: 'flex-start',
            justifyContent: 'space-between'
        },
    });
    export default class GridView extends Component {
        constructor(props) {
            super(props);
            let dividerHorizontal = this.props.dividerHorizontal ? this.props.dividerHorizontal : 0;
            let column = this.props.column ? this.props.column : 2;
            let emptyDataSource = new ListView.DataSource({
                rowHasChanged: (r1, r2)=>r1 != r2
            })
            this.state = {
                'dataSource': emptyDataSource,
                'column': column,
                'viewWidth': 0,
                'dividerHorizontal': dividerHorizontal
            };
        }
        _renderItem(data) {
            let viewWidth = this.state.viewWidth;
            let column = this.state.column;
            let dividerHorizontal = this.state.dividerHorizontal;
            let itemWidth = (viewWidth - (dividerHorizontal * column - dividerHorizontal)) / column;
            let renderItem = this.props.renderItem;
            return (
                <View style={{ itemWidth}}>
                    {
                        renderItem && renderItem(data)
                    }
                </View>
            );
        }
        render() {
            let refreshControl = this.props.refreshControl ? this.props.refreshControl : null;
            return (
                <View
                    style={{flex: 1}}
                    onLayout={(event)=> {
                        let width = event.nativeEvent.layout.width;
                        if (!width || width === this.state.viewWidth)
                            return;
                        this.setState({
                            'viewWidth': width,
                            'dataSource': this.props.dataSource
                        })
                    }}>
                    <ListView
                        style={{flex: 1}}
                        contentContainerStyle={styles.contentContainerStyle}
                        dataSource={this.state.dataSource}
                        renderRow={this._renderItem.bind(this)}
                        refreshControl={refreshControl}
                    />
                </View>
            );
        }
    }
    



    《架构文摘》每天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性 能、高稳定)、大数据、机器学习等各个热门领域。

  • 相关阅读:
    ftp 下载最近一小时的文件
    hdu4767 Bell——求第n项贝尔数
    Uva11762 Race to 1——有向无环图&&记忆化搜索
    P3232 [HNOI2013]游走——无向连通图&&高斯消元
    Random Walk——高斯消元法
    B君的历史——复数乘法&&爆搜
    复数快速幂【模板】
    UVa11542Squre——异或方程组&&高斯消元法
    UVa10828 Back to Kernighan-Ritchie——概率转移&&高斯消元法
    高斯消元法【模板】
  • 原文地址:https://www.cnblogs.com/xwgblog/p/5858976.html
Copyright © 2020-2023  润新知