接着上次的入门的卡片 demo 之后, 这次来写一个 ReactNative 中文网 上面的”电影列表”的例子, 记录一下 ListView 的相关知识
在 iOS 中, 创建一个 tableView 除 tableView 本身的控件以外, 还需要两个必要的东西, 一个是返回 cell 个数, 还有一个就是 tabelViewCell 也就是一个列表中每个表格的视图. RN 中的 ListView 和 tableView 写法还是比较相似的.
首先先导入 ListView 的包:
1 |
|
然后写入 ListView 的数据源和 Cell ListView 的数据源是长成这个样子的:
1 |
|
Cell 的写法也很简单, 其实就是自己写一个 View
1 |
|
然后在 render 中写入 ListView :
1 |
|
这样之后, 我们就可以运行程序了, 如果报错了看看哪里配置不对. 如果运行成功了但是什么也没有就对了, 因为我们还没有把数据配置上去, 我们在组件加载完成之后先配置一些假数据上去:
1 |
|
那么刷新一下模拟器窗口, 大概是这个样子的:
这样大概就是一个想要的列表效果了. 那如何把数据显示在列表上面呢? 在我们自定义的 Cell 中写入一个参数:
1 |
|
这个 Info 就是上面 cloneWithRows 的那个 array 数组取下标得到的对象, 也就是这样 array[cellIndex]
当然这个方法上还可以加一些其他参数来获取一些其他的值, 那这些参数具体代表什么呢? 我们可以看一下 ListView renderRow 的方法:
(rowData, sectionID, rowID) => renderable Takes a data entry from the data source and its ids and should return a renderable component to be rendered as the row. By default the data is exactly what was put into the data source, but it’s also possible to provide custom extractors.
1 |
|
也就是说: 第一个参数是我们的所需要的数据, 第二个参数是当前的 section 的下标, 第三个参数是当前的行数下标
我们也可以利用数据源或者行数之类的来自定义 Cell :
1 |
|
刷新之后的效果:
其次, ListView 还有一个分组的功能, 也就是 iOS tableView 中的 section. 这个东西和配置 Cell 是一样的, 也是要有一个数据源方法和一个 sectionView. 我们先来看数据源部分:
1 |
|
sectionView 这次就写简单点吧 只写一个 Text 就可以了
1 |
|
然后看 ListView 配置 section 部分:
1 |
|
接下来是重要部分, 如果你的 ListView 中带有 Section 那么在刷新数据源的时候就不能使用 cloneWithRows 的方法了, 需要像这样写:
1 |
|
好的, 现在在刷新一下, 效果大概是这样的:
有了自定义 Cell 和自定义 Section 基本上就能完成大部分工作了, 接下来把数据接进去:
1 |
|
自定义的 Cell 为了方便观看直接写行内样式了
1 |
|
最终效果:
另外: ListView 貌似没有提供点击事件, 我们可以在每个 cell 的最外面层套上一个 TouchableOpacity 来支持点击事件, 参数像 cell 那样传输就可以