1# list开发指导 2 3list是用来显示列表的组件,包含一系列相同宽度的列表项,适合连续、多行地呈现同类数据。具体用法请参考[list API](../reference/arkui-js/js-components-container-list.md)。 4 5 6## 创建list组件 7 8在pages/index目录下的hml文件中创建一个list组件。 9 10```html 11<!-- xxx.hml --> 12<div class="container"> 13 <list> 14 <list-item class="listItem"></list-item> 15 <list-item class="listItem"></list-item> 16 <list-item class="listItem"></list-item> 17 <list-item class="listItem"></list-item> 18 </list> 19</div> 20``` 21 22```css 23/* xxx.css */ 24.container { 25 width:100%; 26 height:100%; 27 flex-direction: column; 28 align-items: center; 29 background-color: #F1F3F5; 30} 31.listItem{ 32 height: 20%; 33 background-color:#d2e0e0; 34 margin-top: 20px; 35} 36``` 37 38![zh-cn_image_0000001211071477](figures/zh-cn_image_0000001211071477.png) 39 40> **说明:** 41> - <list-item-group>是<list>的子组件,实现列表分组功能,不能再嵌套<list>,可以嵌套<list-item>。 42> 43> - <list-item>是<list>的子组件,展示列表的具体项。 44 45 46## 添加滚动条 47 48设置scrollbar属性为on即可在屏幕右侧生成滚动条,实现长列表或者屏幕滚动等效果。 49 50```html 51<!-- xxx.hml --> 52<div class="container"> 53 <list class="listCss" scrollbar="on" > 54 <list-item class="listItem"></list-item> 55 <list-item class="listItem"></list-item> 56 <list-item class="listItem"></list-item> 57 <list-item class="listItem"></list-item> 58 <list-item class="listItem"></list-item> 59 <list-item class="listItem"></list-item> 60 </list> 61</div> 62``` 63 64```css 65/* xxx.css */ 66.container { 67 flex-direction: column; 68 background-color: #F1F3F5; 69} 70.listItem{ 71 height: 20%; 72 background-color:#d2e0e0; 73 margin-top: 20px; 74} 75.listCss{ 76 height: 100%; 77 scrollbar-color: #8e8b8b; 78 scrollbar-width: 50px; 79} 80``` 81 82![zh-cn_image_0000001163212980](figures/zh-cn_image_0000001163212980.gif) 83 84 85## 添加侧边索引栏 86 87设置indexer属性为自定义索引时,索引栏会显示在列表右边界处,indexer属性设置为true,默认为字母索引表。 88 89```html 90<!-- xxx.hml --> 91<div class="container"> 92 <list class="listCss" indexer="{{['#','1','2','3','4','5','6','7','8']}}" > 93 <list-item class="listItem" section="#" ></list-item> 94 </list> 95</div> 96``` 97 98```css 99/* xxx.css */ 100.container{ 101 flex-direction: column; 102 background-color: #F1F3F5; 103 } 104.listCss{ 105 height: 100%; 106 flex-direction: column; 107 columns: 1 108} 109``` 110 111![zh-cn_image_0000001166432552](figures/zh-cn_image_0000001166432552.png) 112 113> **说明:** 114> - indexer属性生效需要flex-direction属性配合设置为column,且columns属性设置为1。 115> 116> - indexer可以自定义索引表,自定义时"\#"必须要存在。 117 118 119## 实现列表折叠和展开 120 121为list组件添加groupcollapse和groupexpand事件实现列表的折叠和展开。 122 123```html 124<!-- xxx.hml --> 125<div class="doc-page"> 126 <list style="width: 100%;" id="mylist"> 127 <list-item-group for="listgroup in list" id="{{listgroup.value}}" ongroupcollapse="collapse" ongroupexpand="expand"> 128 <list-item type="item" style="background-color:#FFF0F5;height:95px;"> 129 <div class="item-group-child"> 130 <text>One---{{listgroup.value}}</text> 131 </div> 132 </list-item> 133 <list-item type="item" style="background-color: #87CEFA;height:145px;" primary="true"> 134 <div class="item-group-child"> 135 <text>Primary---{{listgroup.value}}</text> 136 </div> 137 </list-item> 138 </list-item-group> 139 </list> 140</div> 141``` 142 143```css 144/* xxx.css */ 145.doc-page { 146 flex-direction: column; 147 background-color: #F1F3F5; 148} 149list-item{ 150margin-top:30px; 151} 152.top-list-item { 153 width:100%; 154 background-color:#D4F2E7; 155} 156.item-group-child { 157 justify-content: center; 158 align-items: center; 159 width:100%; 160} 161``` 162 163```js 164// xxx.js 165import promptAction from '@ohos.promptAction'; 166export default { 167 data: { 168 direction: 'column', 169 list: [] 170 }, 171 onInit() { 172 this.list = [] 173 this.listAdd = [] 174 for (var i = 1; i <= 2; i++) { 175 var dataItem = { 176 value: 'GROUP' + i, 177 }; 178 this.list.push(dataItem); 179 } 180 }, 181 collapse(e) { 182 promptAction.showToast({ 183 message: 'Close ' + e.groupid 184 }) 185 }, 186 expand(e) { 187 promptAction.showToast({ 188 message: 'Open ' + e.groupid 189 }) 190 } 191} 192``` 193 194![zh-cn_image_0000001162911958](figures/zh-cn_image_0000001162911958.gif) 195 196> **说明:** 197> 198> - groupcollapse和groupexpand事件仅支持list-item-group组件使用。 199 200 201## 场景示例 202 203在本场景中,开发者可以根据字母索引表查找对应联系人。 204 205 206```html 207<!-- xxx.hml --> 208<div class="doc-page"> 209 <text style="font-size: 35px; font-weight: 500; text-align: center; margin-top: 20px; margin-bottom: 20px;"> 210 <span>Contacts</span> 211 </text> 212 <list class="list" indexer="true"> 213 <list-item class="item" for="{{namelist}}" type="{{$item.section}}" section="{{$item.section}}"> 214 <div class="container"> 215 <div class="in-container"> 216 <text class="name">{{$item.name}}</text> 217 <text class="number">18888888888</text> 218 </div> 219 </div> 220 </list-item> 221 <list-item type="end" class="item"> 222 <div style="align-items:center;justify-content:center;width:750px;"> 223 <text style="text-align: center;">Total: 10</text> 224 </div> 225 </list-item> 226 </list> 227</div> 228``` 229 230 231```css 232/* xxx.css */ 233.doc-page { 234 width: 100%; 235 height: 100%; 236 flex-direction: column; 237 background-color: #F1F3F5; 238} 239.list { 240 width: 100%; 241 height: 90%; 242 flex-grow: 1; 243} 244.item { 245 height: 120px; 246 padding-left: 10%; 247 border-top: 1px solid #dcdcdc; 248} 249.name { 250 color: #000000; 251 font-size: 39px; 252} 253.number { 254 color: black; 255 font-size: 25px; 256} 257.container { 258 flex-direction: row; 259 align-items: center; 260} 261.in-container { 262 flex-direction: column; 263 justify-content: space-around; 264} 265``` 266 267 268```js 269// xxx.js 270export default { 271 data: { 272 namelist:[{ 273 name: 'Zoey', 274 section:'Z' 275 },{ 276 name: 'Quin', 277 section:'Q' 278 },{ 279 name:'Sam', 280 section:'S' 281 },{ 282 name:'Leo', 283 section:'L' 284 },{ 285 name:'Zach', 286 section:'Z' 287 },{ 288 name:'Wade', 289 section:'W' 290 },{ 291 name:'Zoe', 292 section:'Z' 293 },{ 294 name:'Warren', 295 section:'W' 296 },{ 297 name:'Kyle', 298 section:'K' 299 },{ 300 name:'Zaneta', 301 section:'Z' 302 }] 303 }, 304 onInit() { 305 } 306 } 307``` 308 309 310![zh-cn_image_0000001234287779](figures/zh-cn_image_0000001234287779.gif) 311 312