1. 程式人生 > >ReactNative 中 ListView實現GridView效果

ReactNative 中 ListView實現GridView效果

在RN中ListVIew擁有ScrollView的所有屬性,所以可以吧ListView當成是ScrollView的一種延伸,在RN中雖然不存在父子類,不過我覺的可以把 ListView當成ScrollView的子類來看。
所以改變ListView的排列方式其實就是改變lIstView的主軸的方向。

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, {Component} from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    ListView,
    Image,
    TouchableOpacity,
    AlertIOS
} from 'react-native'
; var Dimensions = require('Dimensions'); var {width} = Dimensions.get('window'); var {height} = Dimensions.get('window'); var shareData = require('./shareData.json').data; var GridView = React.createClass({ getDefaultProps(){ return{ // ..ListView.propTypes } }, getInitialState(){ var
ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); return { dataSource:ds.cloneWithRows(shareData) } }, render(){ return ( <ListView dataSource={this.state.dataSource} renderRow={this
.renderRow} contentContainerStyle={styles.listStyle} showsVerticalScrollIndicator={false} showsHorizontalScrollIndicator={false} /> )
}, // 返回Item試圖 renderRow(rowData,sectionId,rowId,hItemId){ return( <TouchableOpacity style={styles.itemViewStyle} onPress={() => {AlertIOS.alert(rowId)}} > <View style={styles.itemViewStyle}> <Image source={{uri:rowData.icon}} style={styles.itemIconStyle}/> <Text style={styles.itemTitleStyle}>{rowData.title}</Text> </View> </TouchableOpacity> ) } }) const styles = StyleSheet.create({ listStyle:{ flexDirection:'row', //改變ListView的主軸方向 flexWrap:'wrap', //換行 }, itemViewStyle:{ alignItems:'center', //這裡要注意,如果每個Item都在外層套了一個 Touchable的時候,一定要設定Touchable的寬高 width: width / 3, height:100 }, itemIconStyle:{ width:60, height:60 }, itemTitleStyle:{ marginTop:8 } }); module.exports = GridView;