ListView里插入任何位置的item,按照加入item的顺序显示在后面。

项目需要动态更新listview里的item,但是insertXXXXitem(index,item),不论index的值如何变化,始终显示在列表的最后。

看了下listview

void ListView::refreshView()
{
ssize_t length = _items.size();
for (int i=0; i<length; i++)
{
Widget* item = _items.at(i);
item->setLocalZOrder(i);
remedyLayoutParameter(item);
}
updateInnerContainerSize();
}

在这里对_children按照_items里的顺序进行了排序,

但为什么在doLayout里getLayoutElements()
函数返回的是_children,但这里的顺序是加入item的顺序,而不是_items里的顺序,所以插入item的任何位置都无效,请问是怎么回事?

void LinearVerticalLayoutManager::doLayout(LayoutProtocol* layout)
{
Size layoutSize = layout->getLayoutContentSize();
Vector<Node*> container = layout->getLayoutElements();
float topBoundary = layoutSize.height;

for (auto& subWidget : container)
{

LayoutParameterProtocol* child = dynamic_cast<LayoutParameterProtocol*>(subWidget);
if (child)
{

加入排序,显示对了。
void ListView::refreshView()
{
ssize_t length = _items.size();
for (int i=0; i<length; i++)
{
Widget* item = _items.at(i);
item->setLocalZOrder(i);
remedyLayoutParameter(item);
}
_innerContainer->sortAllChildren();
updateInnerContainerSize();
}