ListView的一个小栗子:
例子内容部分参考地址:http://www.jb51.cc/article/p-cptgfkam-re.html
工程目录机构:
新建一个DramaComponent.js自定义一个公共组件
import React,{Component} from 'react';
import {
View,Text,ListView,StyleSheet,Image,TouchableOpacity,} from 'react-native';
// 导入Dimensions库
var Dimensions = require('Dimensions');
export default class DramaComponent extends Component{
constructor(props){
super(props);
this.state = {
movies:new ListView.DataSource({
rowHasChanged:(r1,r2) => r1!=r2,}),}
}
//组件的生命周期函数
componentDidMount(){
var datas = [{
name:'原来是美男啊',//影片名称
title:'第1集中字',//标题
actor:'xx',//演员
pic:'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1940296251,2372471969&fm=116&gp=0.jpg',//图片地址
url:'http://www.y3600.com/hanju/2016/907.html',//详情链接
},{
name:'原来是美男啊',//影片名称
title:'第2集中字',//演员
pic:'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1646612829,79869058&fm=116&gp=0.jpg',//影片名称
title:'第3集中字',//影片名称
title:'第4集中字',//演员
pic:'http://img.y3600.com/d/file/p/2016/08/24/b216e94526fbf2d49f40dc5aaa1897a4.jpg',//影片名称
title:'第5集中字',//详情链接
}
];
this.setState({
movies:this.state.movies.cloneWithRows(datas),});
}
//渲染ListView item view
_renderMovieView(movie){
return(
<View style={styles.row} key={movie.url}>
<TouchableOpacity onPress={this._onItemPress.bind(this,movie)} activeOpacity={0.8} >
<View>
<Image source={{uri:movie.pic}} style={styles.thumbnail}>
<Text style={styles.title}>{movie.title}</Text>
</Image>
<Text numberOfLines={1} style={styles.name}>{movie.name}</Text>
<Text numberOfLines={1} style={styles.actor}>{movie.actor}</Text>
</View>
</TouchableOpacity>
</View>);
}
//ListView 拉到底部时调用
_onEndReached(){
}
//item 点击事件
_onItemPress(movie){
console.log(movie);
}
render(){
return(
<ListView
dataSource = {this.state.movies}
renderRow = {this._renderMovieView.bind(this)}
style = {styles.listview}
initialListSize = {10}
pageSize = {10}
onEndReachedThreshold = {5}
onEndReached = {this._onEndReached.bind(this)}
enableEmptySections = {true}
contentContainerStyle = {styles.grid}
/>
);
}
}
//样式
const WIN_WIDTH = Dimensions.get('window').width;
var width = WIN_WIDTH/3;
var styles = StyleSheet.create({
grid:{
justifyContent: 'flex-start',flexDirection: 'row',flexWrap: 'wrap',marginTop:10
},row:{
height:140,width:width,flexDirection:'column',justifyContent:'center',alignItems:'center',paddingTop:10,marginTop:5,},thumbnail:{
flex:1,width:width-20,height:80,justifyContent:'flex-end',resizeMode: Image.resizeMode.strech,title:{
fontSize:10,textAlign:'center',color:'white',backgroundColor:'#27272790',name:{
fontSize:12,color:'black',marginTop:8,marginBottom:5,actor:{
fontSize:10,color:'#707070',listview:{
backgroundColor:'#f5fcff',});
调用:
import DramaComponent from './js/component/DramaComponent'
<View style={styles.container}>
<DramaComponent />
</View>
效果图: