• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# list开发指导
2
3list是用来显示列表的组件,包含一系列相同宽度的列表项,适合连续、多行地呈现同类数据。具体用法请参考[list API](../reference/arkui-js/js-components-container-list.md)。
4
5
6## 创建list组件
7
8pages/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> - &lt;list-item-group&gt;是&lt;list&gt;的子组件,实现列表分组功能,不能再嵌套&lt;list&gt;,可以嵌套&lt;list-item&gt;。
42>
43> - &lt;list-item&gt;是&lt;list&gt;的子组件,展示列表的具体项。
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