React Native 自定义ListView

juesexuexi 8年前
   <pre>  <code class="language-javascript">"use strict"    import React, { Component } from 'react';  import {      AppRegistry, // 注册组件,是应用的JS运行入口      StyleSheet,  // 样式表, 类似于一个集合包含各个组件的属性      ListView,      Dimensions,      Text,      TouchableOpacity,      Image,      View  } from 'react-native';    const { width, height } = Dimensions.get('window')    var IMAGES = [      require('./Resource/Test/1.png'),      require('./Resource/Test/2.jpeg'),      require('./Resource/Test/3.png'),      require('./Resource/Test/1.png'),      require('./Resource/Test/2.jpeg'),      require('./Resource/Test/3.png'),      require('./Resource/Test/1.png'),      require('./Resource/Test/2.jpeg'),      require('./Resource/Test/3.png')    ];    // 声明一个 Helloworld 组件  class HelloWorld extends Component {        constructor(props) {            super(props);          const ds = new ListView.DataSource({              rowHasChanged: (r1, r2) => r1 !== r2 //          });          this.state = {                dataSource: ds.cloneWithRows(['  1', ' 2', '3', '4', '5', '6', '7', '8', ])          };      }        // cell 点击方法      touchRow(e) {            alert('第 ' + e + ' 行')      }        // 自定义row(看作cell)      renderRow(rowData, sectionID, rowID) {          var imgSource = IMAGES[rowID];          return (              <TouchableOpacity onPress={() => this.touchRow(rowData)}>                  <View style={styles.rowViewStyle}>                      <Image style={styles.imageThumb} source={imgSource} />                      <Text style={styles.textStyle}>                              {rowData + '自定义追加内容,默认自动换行。  自定义追加内容,默认自动换行。  自定义追加内容,默认自动换行。  '}                      </Text>                  </View>              </TouchableOpacity>          );      }        render() { // 渲染          return (              <View style={styles.container}>                <ListView contentContainerStyle={styles.listViewStyle}                          showsVerticalScrollIndicator={true}                          dataSource={this.state.dataSource}                          renderRow={(rowData, sectionID, rowID) => this.renderRow(rowData, sectionID, rowID)}                />            </View>      );    }  }      const styles = StyleSheet.create({        container: {          flex: 1, // 当一个元素定义了flex属性时,表示该元素是可伸缩的(flex的属性值大于0的时候才可伸缩),          backgroundColor: 'white',          paddingTop: 20,  // 父组件View,距离屏幕顶部20(状态栏)          // width: 300, //把 flex: 1 去掉,自行设定width height,可看一下效果          // height:400,      },      listViewStyle: {          backgroundColor: 'red' // listView北京颜色        },      textStyle: {          flex: 1,          color: 'black',          fontSize: 16,      },      rowViewStyle: {          flexDirection: 'row',          justifyContent: 'center',          padding: 10,          backgroundColor: '#F6F6F6',      },      imageThumb: {          width: 50,          height: 50,      },  });    AppRegistry.registerComponent('HelloWorld', () => HelloWorld);      </code></pre>    <p style="text-align:center"><img src="https://simg.open-open.com/show/26b7d8125646a0f93f9c67c204d49aa5.png"></p>    <p> </p>    <p>来自:http://www.cnblogs.com/madaha/p/5934107.html</p>    <p> </p>