ReactNative——UI5.ListView实现带标题的列表
2017-08-13 00:39
886 查看
ListView 实现 带标题的列表:
import React, {Component} from 'react';
import {
StyleSheet,
ListView,
SectionList, View, Text, TouchableOpacity, Image, Alert,
} from 'react-native';
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
style={styles.listViewStyle}
dataSource={this.state.dataSource}
renderRow={this._renderRow}
renderSectionHeader={this._renderSectionHeader}/>
</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:{
},
iconStyle: {
width: 80,
height: 80,
},
itemStyle: {
paddingBottom: 10,
flexDirection: 'row',
alignItems: 'center',
},
sectionHeaderViewStyle: {
backgroundColor: '#e8e8e8',
height: 25,
justifyContent: 'center'
},
carNameStyle:{
marginLeft:10,
},
})
Dem0下载
不论大神还是新手,欢迎加QQ群一起讨论问题学习技术:230274309
import React, {Component} from 'react';
import {
StyleSheet,
ListView,
SectionList, View, Text, TouchableOpacity, Image, Alert,
} from 'react-native';
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
style={styles.listViewStyle}
dataSource={this.state.dataSource}
renderRow={this._renderRow}
renderSectionHeader={this._renderSectionHeader}/>
</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:{
},
iconStyle: {
width: 80,
height: 80,
},
itemStyle: {
paddingBottom: 10,
flexDirection: 'row',
alignItems: 'center',
},
sectionHeaderViewStyle: {
backgroundColor: '#e8e8e8',
height: 25,
justifyContent: 'center'
},
carNameStyle:{
marginLeft:10,
},
})
Dem0下载
不论大神还是新手,欢迎加QQ群一起讨论问题学习技术:230274309
相关文章推荐
- ReactNative——UI6.ListView实现带标题的多列列表
- 【原创】实现类似手机QQ的可折叠固定标题列表
- React+Redux实现简单的待办事项列表ToDoList
- 55-003-1 HTML5实现文字标题列表显示--鼠标经过时文字动态阴影展示
- react文档demo实现输入展示搜索结果列表
- React实现点击删除列表中对应项
- 实现类似手机QQ的可折叠固定标题列表
- React-Native新列表组件FlatList和SectionList学习 | | 联动列表实现
- SharePoint 2013 通过JavaScript实现列表标题列宽度可拖动
- React入门 (2)—实现微博展示列表
- React-Native新列表组件FlatList和SectionList学习 | | 联动列表实现
- react初学者福利来了:react+redux实现一个列表的静态应用
- PHPCMS使用get标签获取文章列表过滤重复标题并实现分页
- 前后端分离1:使用React+dva+antd快速实现用户列表的展示
- 文章标题 商品列表 angularJs实现
- Android PinnedSectionListView实现滚动标题置顶/联系人列表效果
- React+Redux实现简单的待办事项列表ToDoList
- [word 2010] word 2010 中实现标题样式与多级列表的关联
- react-native简单demo:实现加载豆瓣电影列表
- React Native ——实现一个简单的抓取github上的项目数据列表