首先打开日志,加一行调试信息,运行看一下
可以看到以下结果:
此处手机上显示了0-12,log里面显示调用了12+1次,也就是每次加载一个item就要调用一次getComponent,后面的一次是预加载
当item划出屏幕的时候,item就会被销毁,当再次划回来的时候,会再次调用getComponent方法
当item被销毁,布局对象会变成垃圾,会浪费内存
所以,我们要对ItemProvider.java文件进行优化
//返回item中要加载的布局对象
//参数一:当前要加载哪一行item 0,1,2,......(item的索引)
//参数二:表示要销毁的item的布局对象
//参数三:优化,后面讲
@Override
public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
DirectionalLayout dl;
if (component != null) {
dl = (DirectionalLayout) component;
} else {
//是独立的文件就写null,false
//获取每一个item的布局对象
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;
}
结论:
- 加载一个item,就需要调用一次getComponent方法
- 虽然索引为13的item还没有被加载出来,但是ListContainer会预加载
- 当item划出屏幕的时候,item就会被销毁,当再次划回来的时候,会再次调用getComponent方法