zoukankan      html  css  js  c++  java
  • 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>
            );
        }
    }
    



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

  • 相关阅读:
    ExtJs2.0学习系列(1)Ext.MessageBox
    PDF加水印
    ExtJs2.0学习系列(2)Ext.Panel
    负载均衡(续)
    位运算设置权限续(转)
    Excel导出问题解决方案(导出时前面的0自动被去掉)
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    位运算设置权限
    WCF开发实战系列一:创建第一个WCF服务
    通过SQL Server的位运算功能巧妙解决多选查询
  • 原文地址:https://www.cnblogs.com/xwgblog/p/5858976.html
Copyright © 2011-2022 走看看