PageView的bug

1.getCurPageIndex已经废弃推荐使用getCurrentPageIndex,getCurrentPageIndex在初始化完毕后,居然等于-1,在滑动页面之后才能正常,你逗我呢
2.scrollToPage方法不会修改Pageview里的_previousPageIndex,导致pageView添加的addEventListener无法回调。
版本3.13.1@minggo

@wangzhe

@minggo

你在PageView的初始化中直接修改_currentPageIndex(0)
这个问题我早就发现了。直接修改成0就可以了!

我让 @zilong 来看一下。

感谢反馈,确认是 bug,晚点我会修复之。

直接改成 0 也是有问题的,如果一个 PageView 没有添加任何 Page,此时你调用 getCurrentPageIndex 返回的是第 0 页,但是第 0 页是不存在的,应该要返回-1。

你的第 2 个问题,说 scrollToPage 没有修改 previousPageIndex,导致 PageView::EventType::TURNING 事件没有触发。能否给个测试代码? 我自己写了一个测试例,点击一个 Button,调用 ScrollToPage,事件是有正确被回调的。

直接创建 PageView 以后,马上调用 ScrollToPage 是不会有效果,因为此时 PageView 的 Size 还没有刷新。

你可以在调用 ScrollToPage 之前调用

 pageView->forceDoLayout();

这样就可以了。

后续版本我会修复这个问题。

Fixed at https://github.com/cocos2d/cocos2d-x/pull/17354

1.6.2好像又出现类似bug,我动态添加的页码,打印getCurrentPageIndex 结果是0,这个结果应该正确,但是一开始看不到我添加的页码内容,要随便点一下或者滑动一下才能正常显示出来。
出现bug的时候我用的是this.pageview.insertPage()和 this.pageview.addPage(),都有bug,之前做过几个pageview都没有出现这种情况啊,现在我只能用土方法page.parent = this.pageview.content这样来添加页码才能在一开始正常显示

3.17版本的,这个bug还是存在,只是scrollToPage 来滑动页面是正常的,但是手动滑动之后,在使用scrollToPage ,就会有bug,会在某一页的滚动完成后,回调方法不会回调。因为回调之前会判断previousPageIndex和currentPageIndex是否相等,不相等才会回调。previousPageIndex只有在点击事件滑动的时候会修改,直接使用代码scrollTopage是不会修改的。刚开始previousPageIndex是-1,所以一直scrollToPage 是没问题的。