1e41f4b71Sopenharmony_ci# <list> Development 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ciThe **<list>** component provides a list container that presents a series of list items arranged in a column with the same width. Lists can be used for presenting the same type of data in a multiple and coherent row style. For details, see [list](../reference/apis-arkui/arkui-js/js-components-container-list.md). 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci## Creating a <list> Component 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ciCreate a **<list>** component in the .hml file under **pages/index**. 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci```html 12e41f4b71Sopenharmony_ci<!-- xxx.hml --> 13e41f4b71Sopenharmony_ci<div class="container"> 14e41f4b71Sopenharmony_ci <list> 15e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 16e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 17e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 18e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 19e41f4b71Sopenharmony_ci </list> 20e41f4b71Sopenharmony_ci</div> 21e41f4b71Sopenharmony_ci``` 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci```css 24e41f4b71Sopenharmony_ci/* xxx.css */ 25e41f4b71Sopenharmony_ci.container { 26e41f4b71Sopenharmony_ci width:100%; 27e41f4b71Sopenharmony_ci height:100%; 28e41f4b71Sopenharmony_ci flex-direction: column; 29e41f4b71Sopenharmony_ci align-items: center; 30e41f4b71Sopenharmony_ci background-color: #F1F3F5; 31e41f4b71Sopenharmony_ci} 32e41f4b71Sopenharmony_ci.listItem{ 33e41f4b71Sopenharmony_ci height: 20%; 34e41f4b71Sopenharmony_ci background-color:#d2e0e0; 35e41f4b71Sopenharmony_ci margin-top: 20px; 36e41f4b71Sopenharmony_ci} 37e41f4b71Sopenharmony_ci``` 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci> **NOTE** 42e41f4b71Sopenharmony_ci> - **<list-item-group>** is a child component of the **<list>** component and is used to group items in a list. It can have a **<list-item>** nested inside, but not **<list>**. 43e41f4b71Sopenharmony_ci> 44e41f4b71Sopenharmony_ci> - **<list-item>** is a child component of the **<list>** component and is used to display items in a list. 45e41f4b71Sopenharmony_ci 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci## Adding a Scrollbar 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ciTo display a scrollbar on the right side of the screen, set **scrollbar** to **on**. The side scrollbar can be used to scroll a long list or the screen up or down. 50e41f4b71Sopenharmony_ci 51e41f4b71Sopenharmony_ci```html 52e41f4b71Sopenharmony_ci<!-- xxx.hml --> 53e41f4b71Sopenharmony_ci<div class="container"> 54e41f4b71Sopenharmony_ci <list class="listCss" scrollbar="on" > 55e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 56e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 57e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 58e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 59e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 60e41f4b71Sopenharmony_ci <list-item class="listItem"></list-item> 61e41f4b71Sopenharmony_ci </list> 62e41f4b71Sopenharmony_ci</div> 63e41f4b71Sopenharmony_ci``` 64e41f4b71Sopenharmony_ci 65e41f4b71Sopenharmony_ci```css 66e41f4b71Sopenharmony_ci/* xxx.css */ 67e41f4b71Sopenharmony_ci.container { 68e41f4b71Sopenharmony_ci flex-direction: column; 69e41f4b71Sopenharmony_ci background-color: #F1F3F5; 70e41f4b71Sopenharmony_ci} 71e41f4b71Sopenharmony_ci.listItem{ 72e41f4b71Sopenharmony_ci height: 20%; 73e41f4b71Sopenharmony_ci background-color:#d2e0e0; 74e41f4b71Sopenharmony_ci margin-top: 20px; 75e41f4b71Sopenharmony_ci} 76e41f4b71Sopenharmony_ci.listCss{ 77e41f4b71Sopenharmony_ci height: 100%; 78e41f4b71Sopenharmony_ci scrollbar-color: #8e8b8b; 79e41f4b71Sopenharmony_ci scrollbar-width: 50px; 80e41f4b71Sopenharmony_ci} 81e41f4b71Sopenharmony_ci``` 82e41f4b71Sopenharmony_ci 83e41f4b71Sopenharmony_ci 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci 86e41f4b71Sopenharmony_ci## Adding a Side Index Bar 87e41f4b71Sopenharmony_ci 88e41f4b71Sopenharmony_ciSet a custom **indexer** component to add an index bar at the right boundary of a list. By default, an alphabetical indexer is used. 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci```html 91e41f4b71Sopenharmony_ci<!-- xxx.hml --> 92e41f4b71Sopenharmony_ci<div class="container"> 93e41f4b71Sopenharmony_ci <list class="listCss" indexer="{{['#','1','2','3','4','5','6','7','8']}}" > 94e41f4b71Sopenharmony_ci <list-item class="listItem" section="#" ></list-item> 95e41f4b71Sopenharmony_ci </list> 96e41f4b71Sopenharmony_ci</div> 97e41f4b71Sopenharmony_ci``` 98e41f4b71Sopenharmony_ci 99e41f4b71Sopenharmony_ci```css 100e41f4b71Sopenharmony_ci/* xxx.css */ 101e41f4b71Sopenharmony_ci.container{ 102e41f4b71Sopenharmony_ci flex-direction: column; 103e41f4b71Sopenharmony_ci background-color: #F1F3F5; 104e41f4b71Sopenharmony_ci } 105e41f4b71Sopenharmony_ci.listCss{ 106e41f4b71Sopenharmony_ci height: 100%; 107e41f4b71Sopenharmony_ci flex-direction: column; 108e41f4b71Sopenharmony_ci columns: 1 109e41f4b71Sopenharmony_ci} 110e41f4b71Sopenharmony_ci``` 111e41f4b71Sopenharmony_ci 112e41f4b71Sopenharmony_ci 113e41f4b71Sopenharmony_ci 114e41f4b71Sopenharmony_ci> **NOTE** 115e41f4b71Sopenharmony_ci> - This **indexer** attribute is valid only when **flex-direction** is set to **column** and **columns** is set to **1**. 116e41f4b71Sopenharmony_ci> 117e41f4b71Sopenharmony_ci> - You must include **"\#"** when using a customized indexer. 118e41f4b71Sopenharmony_ci 119e41f4b71Sopenharmony_ci 120e41f4b71Sopenharmony_ci## Collapsing or Expanding a List 121e41f4b71Sopenharmony_ci 122e41f4b71Sopenharmony_ciTo allow a **<list>** component to collapse and expand, add **groupcollapse** and **groupexpand** events. 123e41f4b71Sopenharmony_ci 124e41f4b71Sopenharmony_ci```html 125e41f4b71Sopenharmony_ci<!-- xxx.hml --> 126e41f4b71Sopenharmony_ci<div class="doc-page"> 127e41f4b71Sopenharmony_ci <list style="width: 100%;" id="mylist"> 128e41f4b71Sopenharmony_ci <list-item-group for="listgroup in list" id="{{listgroup.value}}" ongroupcollapse="collapse" ongroupexpand="expand"> 129e41f4b71Sopenharmony_ci <list-item type="item" style="background-color:#FFF0F5;height:95px;"> 130e41f4b71Sopenharmony_ci <div class="item-group-child"> 131e41f4b71Sopenharmony_ci <text>One---{{listgroup.value}}</text> 132e41f4b71Sopenharmony_ci </div> 133e41f4b71Sopenharmony_ci </list-item> 134e41f4b71Sopenharmony_ci <list-item type="item" style="background-color: #87CEFA;height:145px;" primary="true"> 135e41f4b71Sopenharmony_ci <div class="item-group-child"> 136e41f4b71Sopenharmony_ci <text>Primary---{{listgroup.value}}</text> 137e41f4b71Sopenharmony_ci </div> 138e41f4b71Sopenharmony_ci </list-item> 139e41f4b71Sopenharmony_ci </list-item-group> 140e41f4b71Sopenharmony_ci </list> 141e41f4b71Sopenharmony_ci</div> 142e41f4b71Sopenharmony_ci``` 143e41f4b71Sopenharmony_ci 144e41f4b71Sopenharmony_ci```css 145e41f4b71Sopenharmony_ci/* xxx.css */ 146e41f4b71Sopenharmony_ci.doc-page { 147e41f4b71Sopenharmony_ci flex-direction: column; 148e41f4b71Sopenharmony_ci background-color: #F1F3F5; 149e41f4b71Sopenharmony_ci} 150e41f4b71Sopenharmony_cilist-item{ 151e41f4b71Sopenharmony_cimargin-top:30px; 152e41f4b71Sopenharmony_ci} 153e41f4b71Sopenharmony_ci.top-list-item { 154e41f4b71Sopenharmony_ci width:100%; 155e41f4b71Sopenharmony_ci background-color:#D4F2E7; 156e41f4b71Sopenharmony_ci} 157e41f4b71Sopenharmony_ci.item-group-child { 158e41f4b71Sopenharmony_ci justify-content: center; 159e41f4b71Sopenharmony_ci align-items: center; 160e41f4b71Sopenharmony_ci width:100%; 161e41f4b71Sopenharmony_ci} 162e41f4b71Sopenharmony_ci``` 163e41f4b71Sopenharmony_ci 164e41f4b71Sopenharmony_ci```js 165e41f4b71Sopenharmony_ci// xxx.js 166e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction'; 167e41f4b71Sopenharmony_ciexport default { 168e41f4b71Sopenharmony_ci data: { 169e41f4b71Sopenharmony_ci direction: 'column', 170e41f4b71Sopenharmony_ci list: [] 171e41f4b71Sopenharmony_ci }, 172e41f4b71Sopenharmony_ci onInit() { 173e41f4b71Sopenharmony_ci this.list = [] 174e41f4b71Sopenharmony_ci this.listAdd = [] 175e41f4b71Sopenharmony_ci for (var i = 1; i <= 2; i++) { 176e41f4b71Sopenharmony_ci var dataItem = { 177e41f4b71Sopenharmony_ci value: 'GROUP' + i, 178e41f4b71Sopenharmony_ci }; 179e41f4b71Sopenharmony_ci this.list.push(dataItem); 180e41f4b71Sopenharmony_ci } 181e41f4b71Sopenharmony_ci }, 182e41f4b71Sopenharmony_ci collapse(e) { 183e41f4b71Sopenharmony_ci promptAction.showToast({ 184e41f4b71Sopenharmony_ci message: 'Close ' + e.groupid 185e41f4b71Sopenharmony_ci }) 186e41f4b71Sopenharmony_ci }, 187e41f4b71Sopenharmony_ci expand(e) { 188e41f4b71Sopenharmony_ci promptAction.showToast({ 189e41f4b71Sopenharmony_ci message: 'Open ' + e.groupid 190e41f4b71Sopenharmony_ci }) 191e41f4b71Sopenharmony_ci } 192e41f4b71Sopenharmony_ci} 193e41f4b71Sopenharmony_ci``` 194e41f4b71Sopenharmony_ci 195e41f4b71Sopenharmony_ci 196e41f4b71Sopenharmony_ci 197e41f4b71Sopenharmony_ci> **NOTE** 198e41f4b71Sopenharmony_ci> 199e41f4b71Sopenharmony_ci> The **groupcollapse** and **groupexpand** events can be used only by the **list-item-group** component. 200e41f4b71Sopenharmony_ci 201e41f4b71Sopenharmony_ci 202e41f4b71Sopenharmony_ci## Example Scenario 203e41f4b71Sopenharmony_ci 204e41f4b71Sopenharmony_ciSearch for contacts by using an alphabetical indexer. 205e41f4b71Sopenharmony_ci 206e41f4b71Sopenharmony_ci 207e41f4b71Sopenharmony_ci```html 208e41f4b71Sopenharmony_ci<!-- xxx.hml --> 209e41f4b71Sopenharmony_ci<div class="doc-page"> 210e41f4b71Sopenharmony_ci <text style="font-size: 35px; font-weight: 500; text-align: center; margin-top: 20px; margin-bottom: 20px;"> 211e41f4b71Sopenharmony_ci <span>Contacts</span> 212e41f4b71Sopenharmony_ci </text> 213e41f4b71Sopenharmony_ci <list class="list" indexer="true"> 214e41f4b71Sopenharmony_ci <list-item class="item" for="{{namelist}}" type="{{$item.section}}" section="{{$item.section}}"> 215e41f4b71Sopenharmony_ci <div class="container"> 216e41f4b71Sopenharmony_ci <div class="in-container"> 217e41f4b71Sopenharmony_ci <text class="name">{{$item.name}}</text> 218e41f4b71Sopenharmony_ci <text class="number">18888888888</text> 219e41f4b71Sopenharmony_ci </div> 220e41f4b71Sopenharmony_ci </div> 221e41f4b71Sopenharmony_ci </list-item> 222e41f4b71Sopenharmony_ci <list-item type="end" class="item"> 223e41f4b71Sopenharmony_ci <div style="align-items:center;justify-content:center;width:750px;"> 224e41f4b71Sopenharmony_ci <text style="text-align: center;">Total: 10</text> 225e41f4b71Sopenharmony_ci </div> 226e41f4b71Sopenharmony_ci </list-item> 227e41f4b71Sopenharmony_ci </list> 228e41f4b71Sopenharmony_ci</div> 229e41f4b71Sopenharmony_ci``` 230e41f4b71Sopenharmony_ci 231e41f4b71Sopenharmony_ci 232e41f4b71Sopenharmony_ci```css 233e41f4b71Sopenharmony_ci/* xxx.css */ 234e41f4b71Sopenharmony_ci.doc-page { 235e41f4b71Sopenharmony_ci width: 100%; 236e41f4b71Sopenharmony_ci height: 100%; 237e41f4b71Sopenharmony_ci flex-direction: column; 238e41f4b71Sopenharmony_ci background-color: #F1F3F5; 239e41f4b71Sopenharmony_ci} 240e41f4b71Sopenharmony_ci.list { 241e41f4b71Sopenharmony_ci width: 100%; 242e41f4b71Sopenharmony_ci height: 90%; 243e41f4b71Sopenharmony_ci flex-grow: 1; 244e41f4b71Sopenharmony_ci} 245e41f4b71Sopenharmony_ci.item { 246e41f4b71Sopenharmony_ci height: 120px; 247e41f4b71Sopenharmony_ci padding-left: 10%; 248e41f4b71Sopenharmony_ci border-top: 1px solid #dcdcdc; 249e41f4b71Sopenharmony_ci} 250e41f4b71Sopenharmony_ci.name { 251e41f4b71Sopenharmony_ci color: #000000; 252e41f4b71Sopenharmony_ci font-size: 39px; 253e41f4b71Sopenharmony_ci} 254e41f4b71Sopenharmony_ci.number { 255e41f4b71Sopenharmony_ci color: black; 256e41f4b71Sopenharmony_ci font-size: 25px; 257e41f4b71Sopenharmony_ci} 258e41f4b71Sopenharmony_ci.container { 259e41f4b71Sopenharmony_ci flex-direction: row; 260e41f4b71Sopenharmony_ci align-items: center; 261e41f4b71Sopenharmony_ci} 262e41f4b71Sopenharmony_ci.in-container { 263e41f4b71Sopenharmony_ci flex-direction: column; 264e41f4b71Sopenharmony_ci justify-content: space-around; 265e41f4b71Sopenharmony_ci} 266e41f4b71Sopenharmony_ci``` 267e41f4b71Sopenharmony_ci 268e41f4b71Sopenharmony_ci 269e41f4b71Sopenharmony_ci```js 270e41f4b71Sopenharmony_ci// xxx.js 271e41f4b71Sopenharmony_ciexport default { 272e41f4b71Sopenharmony_ci data: { 273e41f4b71Sopenharmony_ci namelist:[{ 274e41f4b71Sopenharmony_ci name: 'Zoey', 275e41f4b71Sopenharmony_ci section:'Z' 276e41f4b71Sopenharmony_ci },{ 277e41f4b71Sopenharmony_ci name: 'Quin', 278e41f4b71Sopenharmony_ci section:'Q' 279e41f4b71Sopenharmony_ci },{ 280e41f4b71Sopenharmony_ci name:'Sam', 281e41f4b71Sopenharmony_ci section:'S' 282e41f4b71Sopenharmony_ci },{ 283e41f4b71Sopenharmony_ci name:'Leo', 284e41f4b71Sopenharmony_ci section:'L' 285e41f4b71Sopenharmony_ci },{ 286e41f4b71Sopenharmony_ci name:'Zach', 287e41f4b71Sopenharmony_ci section:'Z' 288e41f4b71Sopenharmony_ci },{ 289e41f4b71Sopenharmony_ci name:'Wade', 290e41f4b71Sopenharmony_ci section:'W' 291e41f4b71Sopenharmony_ci },{ 292e41f4b71Sopenharmony_ci name:'Zoe', 293e41f4b71Sopenharmony_ci section:'Z' 294e41f4b71Sopenharmony_ci },{ 295e41f4b71Sopenharmony_ci name:'Warren', 296e41f4b71Sopenharmony_ci section:'W' 297e41f4b71Sopenharmony_ci },{ 298e41f4b71Sopenharmony_ci name:'Kyle', 299e41f4b71Sopenharmony_ci section:'K' 300e41f4b71Sopenharmony_ci },{ 301e41f4b71Sopenharmony_ci name:'Zaneta', 302e41f4b71Sopenharmony_ci section:'Z' 303e41f4b71Sopenharmony_ci }] 304e41f4b71Sopenharmony_ci }, 305e41f4b71Sopenharmony_ci onInit() { 306e41f4b71Sopenharmony_ci } 307e41f4b71Sopenharmony_ci } 308e41f4b71Sopenharmony_ci``` 309e41f4b71Sopenharmony_ci 310e41f4b71Sopenharmony_ci 311e41f4b71Sopenharmony_ci