我的listView中的Item是自定义的一个类,继承cocos2d::ui::Widget
Item的init方法中添加了一个child,该child通过GUIReader::getInstance()->widgetFromJsonFile方法创建。并且该child中有一个label和一个button。
其中label有个默认值, 同时button调用addTouchEventListener((Ref* ref,Widget::TouchEventType type){…})添加事件通知。
Item提供了一个setLabel方法修改label的值。
并且为了能使用listview的pushBackDefaultItem方法Item重写了createCloneInstance方法:
Widget* Item::createCloneInstance()
{
return Item::create();
}
我首先调用了pListView->setItemModel(Item::create())设置model
然后调用pListView->pushBackDefaultItem()方法添加了10个item
再对每一个创建的item调用setLabel方法修改默认值。
程序运行后
1.所有Item显示的label都是默认值,没有被改变,
2.所有Item中button的touchEventListener的lambda的this指向的都是model的地址。
3.断点查看setLabel方法的确修改了label的值
4.通过button的touchEventListener的参数ref获取其parent再获取label,设置其值,Item的显示成功被改变
然后我把pListView->pushBackDefaultItem()换成pListView->addChild(Item::create()),一切都正常了。
现在的调试情况来看,应该是Widget的clone方法存在bug,也可能是我使用的方法有问题。望版主看到后能给予回复,感谢!
