赞
踩
ListContainer是一个列表容器类组件。在这里的每一行,我们都可以看做是一个item。如下图所示,包裹了所有item的红色的容器,就是ListContainer。
注意细节:
① 每一行其实就是一个独立的item。
② 在屏幕的上面和下面,还有很多没有展示出来的item。 当我们用手指往上滑动的时候,就可以到下面的item。
当我们用手指往下滑动的时候,就可以到上面的item。 只不过划出屏幕的item会被销毁,而没有划入屏幕的item
还没有创建出来。
③ 如果item过多,在内存会有垃圾。这个问题之后讲解。
实现步骤:
代码:
1.ability_main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:alignment="center"
ohos:orientation="vertical">
<ListContainer
ohos:id="$+id:listcontainer"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:layout_alignment="horizontal_center"
/>
</DirectionalLayout>
2.在layout中新建一个itemview.xml文件,表示每一个item中的元素
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_content"
ohos:width="match_content"
ohos:orientation="vertical">
<!--记得修改DirectionalLayout宽高-->
<Text
ohos:id="$+id:itemtext"
ohos:height="50vp"
ohos:width="match_parent"
ohos:text_size="35fp"
/>
</DirectionalLayout>
3.新建一个javabean类,记录text,同时空参、实参、get和set都不能少
package com.example.listcontainerapplication.domain;
public class Item {
//记录的值就是赋值给item里面的text
private String text;
public Item() {
}
public Item(String text) {
this.text = text;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
4.新建适配器类,管理item
package com.example.listcontainerapplication.provider;
import com.example.listcontainerapplication.ResourceTable;
import com.example.listcontainerapplication.domain.Item;
import ohos.aafwk.ability.AbilitySlice;
import ohos.agp.components.*;
import java.util.ArrayList;
public class ItemProvider extends BaseItemProvider {
//集合中装了所有Item的对象
private ArrayList<Item> list;
private AbilitySlice as;
public ItemProvider(ArrayList<Item> list, AbilitySlice as) {
this.list = list;
this.as = as;
}
public ArrayList<Item> getList() {
return list;
}
public void setList(ArrayList<Item> list) {
this.list = list;
}
public AbilitySlice getAs() {
return as;
}
public void setAs(AbilitySlice as) {
this.as = as;
}
//总数据的个数
//有多少个item
@Override
public int getCount() {
return list.size();
}
//i 表示索引
//根据索引返回数据
@Override
public Object getItem(int i) {
if (list != null && i >= 0 && i < list.size()){
return list.get(i);
}
return null;
}
//返回某一项的id
@Override
public long getItemId(int i) {
return i;
}
//返回item中要加载的布局对象
//参数一:当前要加载哪一行item 0,1,2,......(item的索引)
//参数二:优化,后面讲
//参数三:优化,后面讲
@Override
public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
//是独立的文件就写null,false
//获取每一个item的布局对象
DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(as).parse(ResourceTable.Layout_itemview, null, false);
//获取每一个item里面的数据
Item item = list.get(i);
//把数据加载到布局里面的Text中
Text text = (Text) dl.findComponentById(ResourceTable.Id_itemtext);
text.setText(item.getText());
//当上面的代码执行完毕之后,就获取到了一个有数据的布局对象
//此时我们只要把布局对象dl返回就可以了
//其实就是因为在Item中,最外层的就是dl布局
return dl;
}
}
MainAbilitySlice.java代码:
package com.example.listcontainerapplication.slice;
import com.example.listcontainerapplication.ResourceTable;
import com.example.listcontainerapplication.domain.Item;
import com.example.listcontainerapplication.provider.ItemProvider;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Component;
import ohos.agp.components.ListContainer;
import java.util.ArrayList;
public class MainAbilitySlice extends AbilitySlice {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//找到ListContainer
ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_listcontainer);
//创建集合,并添加数据
ArrayList<Item> datasList = getData();
//创建一个Item的管理员对象(适配器对象)
//并把要展示的所有数据和要加载的页面传递过去
ItemProvider itemProvider = new ItemProvider(datasList,this);
//把适配器交给列表容器组件
listContainer.setItemProvider(itemProvider);
}
public ArrayList<Item> getData(){
ArrayList<Item> list = new ArrayList<>();
//给集合添加数据
for (int i = 0; i < 100; i++) {
list.add(new Item("item" + i));
}
return list;
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
运行效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。