ReactNative——UI6.ListView实现带标题的多列列表
来源:互联网 发布:jsp页面添加java代码 编辑:程序博客网 时间:2024/05/20 23:56
ListView 实现多列列表
import React, {Component} from 'react';import { StyleSheet, ListView, SectionList, View, Text, TouchableOpacity, Image, Alert,} from 'react-native';var {width, height} = require('Dimensions').get('window');var cols = 3;var cellWH = width/4;var hMargin = (width - cols * cellWH) / (cols + 1);var vMargin = 25;import carInfos from '../data/carBrandData.json'/** * 1. 于state 中 初始化dataSource * 2. 在componentDidMount 中请求数据 并更新state 中的 dataSource * 3. render() 返回 renderRow&Section、 renderHeader */export default class CarBrandList extends Component { constructor(props) { super(props); let _getSectionData = (dataBlob, sectionID) => { return dataBlob[sectionID]; }; let _getRowData = (dataBlob, sectionID, rowID) => { return dataBlob[sectionID + ':' + rowID]; }; this.state = { //1.初始化dataSource dataSource: new ListView.DataSource({ getSectionData: _getSectionData, getRowData: _getRowData, rowHasChanged: (r1, r2) => { r1 !== r2 }, sectionHeaderHasChanged: (s1, s2) => { s1 !== s2 }, }), } } componentDidMount() { //2.请求数据 更新数据 this._requestCarInfo(); } _requestCarInfo() { let jsonData = carInfos.data; let dataBlob = {}, sectionIDs = [], rowIDs = [], cars = []; // 处理数据成可用格式 for (let i = 0; i < jsonData.length; i++) { //1.把组号放入sectionIDs中 sectionIDs.push(i); //2.把组中的内容放入dataBlob dataBlob[i] = jsonData[i].title; //3.取出组中的数据//TODO:这个地方 为什么不是cars[i] cars = jsonData[i].cars; rowIDs[i] = []; //遍历所有的车数组 for (let j in cars) { //把行号放入rowIDs rowIDs[i].push(j); //把每一行的内容放入dataBlob 对象中 dataBlob[i + ':' + j] = cars[j]; } } console.log(dataBlob); console.log(sectionIDs); console.log(rowIDs); // 数据处理完成,更新状态机 this.setState({ dataSource: this.state.dataSource.cloneWithRowsAndSections(dataBlob, sectionIDs, rowIDs), }) } render() { return ( <View> <ListView dataSource={this.state.dataSource} renderRow={this._renderRow} renderSectionHeader={this._renderSectionHeader} contentContainerStyle={styles.listViewStyle}/> </View> ); } _renderRow(rowData) { return ( <TouchableOpacity activeOpacity={0.5} onPress={() => Alert.alert( rowData.name, )}> <View style={styles.itemStyle}> <Image source={{uri: rowData.icon}} style={styles.iconStyle}/> <Text style={styles.carNameStyle}>{rowData.name}</Text> </View> </TouchableOpacity> ); } _renderSectionHeader(sectionData, sectionID) { return ( <View style={styles.sectionHeaderViewStyle}> <Text style={{marginLeft: 5, color: 'red'}}>{sectionData}</Text> </View> ); }}const styles = StyleSheet.create({ listViewStyle: { flexDirection: 'row', flexWrap: 'wrap', alignItems: 'center', }, iconStyle: { width: cellWH, height: cellWH, }, itemStyle: { width: cellWH, height: cellWH+20, marginLeft: hMargin, marginTop: vMargin, alignItems: 'center' // paddingBottom: 10, // flexDirection: 'row', // alignItems: 'center', }, sectionHeaderViewStyle: { width:width, backgroundColor: '#e8e8e8', height: 25, justifyContent: 'center' }, carNameStyle:{ marginLeft:10, },})
使用的是ListView的样式属性 来实现多行的功能。
阅读全文
1 0
- ReactNative——UI6.ListView实现带标题的多列列表
- ReactNative——UI5.ListView实现带标题的列表
- 实现带标题的ListView
- ReactNative列表ListView
- PB中单击列表框的列标题实现排序
- ReactNative——UI4.ListView 实现9九宫格
- ReactNative中ListView的实现效果
- android带索引和标题的listview
- StickyListHeaders-master带标题的listview
- BCB中listview和treeview控件实现制定列和标题字体颜色改变的实现
- Android ListView同一个item显示2列的实现方法(仿2列商品列表)
- ListView-添加标题列
- ListView-修改标题列
- dl带描述的标题列表
- ReactNative的ListView简述
- ListView列表的实现1——ArrayAdapter数组适配器
- ListView列表的实现2——SimpleAdapter数组适配器
- 实现可以多选的ListView列表
- 开启全新奋斗的程序员之路
- JMS与activeMQ,消息中间件入门
- python中ones zeros 的用法
- 子类继承父类静态变量问题
- 21天学通python——第一天
- ReactNative——UI6.ListView实现带标题的多列列表
- 网站注册页面显示(表单标签)
- POJ 1061 青蛙的约会(扩展欧几里得)
- AI(1)认知 人工智能、机器学习、神经网络、深度学习。
- 考考你的Coding思维,如下编码(加密)代码的解码(解密)代码?
- Chrome 扩展程序——LastPass:密码管理工具
- C++数据类型转换总结
- 两次的CVTE面试之旅和反思
- ssh框架--图片(文件)上传