热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

[置顶]【稀饭】reactnative实战系列教程之首页列表UI实现

首页设计与实现首先,这章节讲的是首页内容的设计与实现,不包括主界面的设计,因为一开始入手,我希望能立马获取到数据并能展示出来,后面再来搭木积似的一步一步把整体框架做起来。设计(图丑,莫

首页设计与实现

首先,这章节讲的是首页内容的设计与实现,不包括主界面的设计,因为一开始入手,我希望能立马获取到数据并能展示出来,后面再来搭木积似的一步一步把整体框架做起来。

设计

(图丑,莫见怪~)

主界面的设计如下

//图片地址
url:'http://www.y3600.com/hanju/2016/907.html',//详情链接
};
var datas = [];
datas.push(dramaItem);
this.setState({
movies:this.state.movies.cloneWithRows(datas),
});
}

这里关键是通过setState进行状态更新,进而刷新页面,要注意的是调用cloneWithRows进行数据填充,datas是个数据集合。关键代码:

this.setState({
movies:this.state.movies.cloneWithRows(datas),
});

然后重新刷新(双击RR)

//图片地址
url:'http://www.y3600.com/hanju/2016/907.html',//详情链接
};
var datas = [];
datas.push(dramaItem);
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>

);
}

_onItemPress(movie){
console.log(movie);
}

//ListView 拉到底部时调用
_onEndReached(){
console.log('加载下一页');
}

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'
},
row:{
height:200,
width:width,
flexDirection:'column',
justifyContent:'center',
alignItems:'center',
paddingTop:10,
paddingBottom:10,
marginTop:5,
marginBottom:5,
},
thumbnail:{
flex:1,
width:width-20,
height:140,
justifyContent:'flex-end',
resizeMode: Image.resizeMode.strech,
},
title:{
fontSize:10,
textAlign:'center',
color:'white',
backgroundColor:'#27272790',
},
name:{
fontSize:12,
width:width-20,
color:'black',
marginTop:8,
marginBottom:5,
textAlign:'center',
},
actor:{
fontSize:10,
color:'#707070',
width:width-20,
textAlign:'center',
},
listview:{
backgroundColor:'#f5fcff',
},
});

这里可能要提一下,我们使用的是ListView,但是最后效果好像是一个Android中GridView的效果,或者你可能会有疑问react native中如何实现GridView的效果。其实在react native中使用ListView在配合好style就可以实现GridView的效果了,主要样式如下:

    grid:{
justifyContent: 'flex-start',
flexDirection: 'row',
flexWrap: 'wrap'
},
row:{
height:200,
width:width,
flexDirection:'column',
justifyContent:'center',
alignItems:'center',
paddingTop:10,
paddingBottom:10,
marginTop:5,
marginBottom:5,
},

grid是ListView的contentContainerStyle,justifyContent: ‘flex-start’使每个item靠左,flexDirection: ‘row’让item是水平从左往右排列,flexWrap: ‘wrap’是当一行item排列不下时自动换行。row是每个item的style,需要设置好height和width。

总结

本节讲了应用的的整体设计,并实现了列表UI,只是数据还是模拟阶段,主要技术点在于ListView的使用,熟悉dataSource、renderRow、ListView.DataSource、cloneWithRows以及函数的传参问题。下一节,我们在实现真实数据的获取和解析,使用到cheerio这个html解析库,如果你还不知道这是用来干嘛的,你可以先去了解下。


推荐阅读
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • 作为一名拥有五年工作经验的开发人员,对产品设计和管理有着独到的见解。本文将分享腾讯暑期实习生面试的经历,涵盖笔试、群面、专业面试、总监面试及最终HR面试的全过程,希望能为即将面试的同学提供有价值的参考。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • 本文详细探讨了在Android 8.0设备上使用ChinaCock的TCCBarcodeScanner进行扫码时出现的应用闪退问题,并提供了解决方案。通过调整配置文件,可以有效避免这一问题。 ... [详细]
  • 当在 Android 应用中使用 NDK 时,可能会遇到 java.lang.UnsatisfiedLinkError: Native method not found 的错误。本文将详细探讨该错误的原因及解决方案。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文介绍了如何在React和React Native项目中使用JavaScript进行日期格式化,提供了获取近7天、近半年及近一年日期的具体实现方法。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • 本文介绍如何在Android应用中通过调用系统图库来选择并获取图片,以供进一步处理或展示。 ... [详细]
  • 本文详细介绍了如何在现有的Android Studio项目中集成JNI(Java Native Interface),包括下载必要的NDK和构建工具,配置CMakeLists.txt文件,以及编写和调用JNI函数的具体步骤。 ... [详细]
  • 本文通过探讨React中Context的使用,解决了在多层级组件间传递状态的难题。我们将详细介绍Context的工作原理,并通过实际案例演示其在项目中的具体应用。 ... [详细]
  • 本文详细探讨了Xshell6评估版到期后无法使用的常见问题,并提供了有效的解决方案,包括如何合法购买授权以继续使用。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有