概述

在安卓原生开发中,ListView是很常用的一个列表控件,那么React Native(RN)如何实现该功能呢?我们来看一下ListView的源码
ListView是基于ScrollView扩展得来的,所以具有ScrollView的相关属性:
dataSource:数据源,类似于安卓中我们传入BaseAdapter的数据集合。
renderRow:渲染某一行,类似于BaseAdapter中的getItem方法。
onEndReached:简单说就是用于分页操作,在安卓中原生开发中,我们需要自己实现相应的方法。
onEndReachedThreshold:调用onEndReached之前的临界值,单位是像素。
refreshControl:指定RefreshControl组件,用于为ScrollView提供下拉刷新功能。(该属性是继承与ScrollView)
renderHeader:渲染头部View,类似于安卓ListView中的addHeader.
以上的属性基本可以解决一些常见的列表需求,如果我们想要实现网格的效果,也可以借助该组件来实现,有点类似于安卓中的RecyclerView控件。
pageSize:渲染的网格数,类似于安卓GridView中的numColumns.
contentContainerStyle:该属性是继承于ScrollView,主要作用于该组件的内容容器上。
要用ListView实现九宫格的效果:
1,配置pageSize确认网格数量
<ListView
automaticallyAdjustContentInsets={false}
contentContainerStyle={styles.grid}
dataSource={this.state.dataSource}
renderRow={this.renderRow.bind(this)}
pageSize={3}
refreshControl={
<RefreshControl
onRefresh={this.onRefresh.bind(this)}
refreshing={this.state.isLoading}
colors={['#ff0000', '#00ff00', '#0000ff']}
enabled={true}
/>
}
/>
2,设置每一个网格的宽度样式
itemLayout:{
flex:1,
width:Util.size.width/3,
height:Util.size.width/3,
alignItems:'center',
justifyContent:'center',
borderWidth: Util.pixel,
borderColor: '#eaeaea'
},
3,设置contentContainerStyle相应属性
grid: {
justifyContent: 'space-around',
flexDirection: 'row',
flexWrap: 'wrap'
},
这里需要说明下,由于ListView的默认方向是纵向的,所以需要设置ListView的contentContainerStyle属性,添加flexDirection:‘row'。其次,ListView在同一行显示,而且通过flexWrap:'wrap'设置自动换行。
注:flexWrap属性:wrap、nowrap,wrap:空间不足的情况下自动换行,nowrap:空间不足,压缩容器,不会自动换行。
以下是完整代码:
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
ListView,
Image,
TouchableOpacity, // 不透明触摸
AlertIOS
} from 'react-native';
// 获取屏幕宽度
var Dimensions = require('Dimensions');
const screenW = Dimensions.get('window').width;
// 导入json数据
var shareData = require('./shareData.json');
// 一些常亮设置
const cols = 3;
const cellWH = 100;
const vMargin = (screenW - cellWH * cols) / (cols + 1);
const hMargin = 25;
// ES5
var ListViewDemo = React.createClass({
// 初始化状态值(可以变化)
getInitialState(){
// 创建数据源
var ds = new ListView.DataSource({rowHasChanged:(r1,r2) => r1 !== r2});
return{
dataSource:ds.cloneWithRows(shareData.data)
}
},
render(){
return(
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow}
contentContainerStyle={styles.listViewStyle}
/>
);
},
// 返回cell
renderRow(rowData){
return(
<TouchableOpacity activeOpacity={0.8} onPress={()=>{AlertIOS.alert('点击了')}} >
<View style={styles.innerViewStyle}>
<Image source={{uri:rowData.icon}} style={styles.iconStyle} />
<Text>{rowData.title}</Text>
</View>
</TouchableOpacity>
);
},
});
const styles = StyleSheet.create({
listViewStyle:{
// 主轴方向
flexDirection:'row',
// 一行显示不下,换一行
flexWrap:'wrap',
// 侧轴方向
alignItems:'center', // 必须设置,否则换行不起作用
},
innerViewStyle:{
width:cellWH,
height:cellWH,
marginLeft:vMargin,
marginTop:hMargin,
// 文字内容居中对齐
alignItems:'center'
},
iconStyle:{
width:80,
height:80,
},
});
AppRegistry.registerComponent('ListViewDemo', () => ListViewDemo);
效果如图(数据源自己加)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# React
# Native
# 实现九宫格
# 九宫格
# ReactNative列表ListView的用法
# React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
# 类似于
# 换行
# 临界值
# 要用
# 分页
# 如图
# 来实现
# 得来
# 大家多多
# 如何实现
# 设置自动
# 作用于
# 不透明
# 不起作用
# 情况下
# 是基于
# borderWidth
# colors
# state
相关文章:
在线制作视频的网站有哪些,电脑如何制作视频短片?
建站主机选哪种环境更利于SEO优化?
郑州企业网站制作公司,郑州招聘网站有哪些?
如何使用Golang table-driven基准测试_多组数据测量函数效率
网站制作软件有哪些,制图软件有哪些?
建站之星伪静态规则如何正确配置?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
建站之星代理如何获取技术支持?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
中山网站推广排名,中山信息港登录入口?
如何在西部数码注册域名并快速搭建网站?
如何在宝塔面板中创建新站点?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
网站企业制作流程,用什么语言做企业网站比较好?
如何规划企业建站流程的关键步骤?
如何通过智能用户系统一键生成高效建站方案?
建站之星logo尺寸如何设置最合适?
如何通过商城免费建站系统源码自定义网站主题?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
建站主机无法访问?如何排查域名与服务器问题
利用JavaScript实现拖拽改变元素大小
,交易猫的商品怎么发布到网站上去?
建站与域名管理如何高效结合?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
制作网站的软件免费下载,免费制作app哪个平台好?
如何在服务器上三步完成建站并提升流量?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
已有域名和空间,如何快速搭建网站?
如何通过服务器快速搭建网站?完整步骤解析
高端网站建设与定制开发一站式解决方案 中企动力
c# 在高并发下使用反射发射(Reflection.Emit)的性能
建站之星收费标准详解:套餐费用及年费价格表一览
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
html制作网站的步骤有哪些,iapp如何添加网页?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
建站主机如何选?性能与价格怎样平衡?
建站之星后台密码遗忘?如何快速找回?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
,购物网站怎么盈利呢?
建站之星免费模板:自助建站系统与智能响应式一键生成
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何快速重置建站主机并恢复默认配置?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
,如何利用word制作宣传手册?
建站主机系统SEO优化与智能配置核心关键词操作指南
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
*请认真填写需求信息,我们会在24小时内与您取得联系。