请教一个UIListView问题

假如我有列表有个 A ,B,C 3个Item
然后我想列表重新排序,比如 C ,A, B 这样的新列表。

我使用.removeAllItems() 移除列表所有item,然后再 添加C,A,B.
这个时候就报错了。 大概意思是提示 不能重复 添加child。

如果我换一种做法,
我先在列表中 移除C,然后在列表后面添加C, 移除A,列表后面添加A,…
最后正常显示新列表 C,A,B

现在问题是 为什么 第一种做法会报错呢,

求大神 出来帮我看看呀, :6: 。。。。

这个问题比较诡异,需要试试才知道逻辑的错误在哪里,试完有结果就贴到这里,请稍候

好的,谢谢了。。 坐等。。。:14:

请问你用的是什么版本的引擎?JSB上的问题还是Web端的问题?我测试了3.0 beta,没办法重现你说的情况

jsb 2.2.2

我在新的2.x分支中测试也通过了,你可以尝试修改引擎的ListView测试例,看看你的环境中问题是不是还存在,如果是的话可以尝试升级到更新版本的2.x

JS测试例中的CocoStudioTest/GUITest/UIListViewTest.js,修改下面部分


            // add custom item
            for (var i = 0; i < count / 4; ++i) {
                var custom_button = ccs.Button.create();
                custom_button.setName("TextButton");
                custom_button.setTouchEnabled(true);
                custom_button.loadTextures("res/cocosgui/button.png", "res/cocosgui/buttonHighlighted.png", "");
                custom_button.setScale9Enabled(true);
                custom_button.setSize(default_button.getSize());

                var custom_item = ccs.Layout.create();
                custom_item.setSize(custom_button.getSize());
                custom_button.setPosition(cc.p(custom_item.getSize().width / 2, custom_item.getSize().height / 2));
                custom_item.addChild(custom_button);

                listView.pushBackCustomItem(custom_item);
            }

改为


            // add custom item
            var items = ];
            for (var i = 0; i < count / 4; ++i) {
                var custom_button = ccs.Button.create();
                custom_button.setName("TextButton");
                custom_button.setTouchEnabled(true);
                custom_button.loadTextures("res/cocosgui/button.png", "res/cocosgui/buttonHighlighted.png", "");
                custom_button.setScale9Enabled(true);
                custom_button.setSize(default_button.getSize());

                var custom_item = ccs.Layout.create();
                custom_item.setSize(custom_button.getSize());
                custom_button.setPosition(cc.p(custom_item.getSize().width / 2, custom_item.getSize().height / 2));
                custom_item.addChild(custom_button);
                items.push(custom_item);

                listView.pushBackCustomItem(custom_item);
            }
                                             
            listView.removeAllItems();
            for (var i = 0; i < items.length; ++i) {
                listView.pushBackCustomItem(items*);
            }
*

嗯嗯,好的,谢谢。