我想自动在特定项目上滚动ListView。 ListView必须自动滚动到索引中的项目。
listView.ensureVisible(itemIndex);
但它不起作用。另一种选择:
yourListView.currentItem = { index: 8, hasFocus: true, showFocus: true }
它也失败了。
如何解决这个问题?
答案 0 :(得分:1)
通常,您必须在调用msSetImmediate时将调用包装到ensureVisible(index)
。不确定为什么会这样,可能是一个错误,但对我有用。例如:
msSetImmediate(function (){ listView.ensureVisible(4);} );
如果查看setImmediate的文档(msSetImmediate是Microsoft特定的实现),该函数描述为:
请求在当前或待处理任务完成时调用函数,例如事件或屏幕更新。
这确实有点意义,因为它听起来确保在拨打电话之前完成所有列表视图动画等,以确保项目可见。
请参阅此主题以获取相关帖子:http://social.msdn.microsoft.com/Forums/en-US/winappswithhtml5/thread/2f11e46f-9421-4e31-93d3-fca06563ec41/
答案 1 :(得分:0)
我可能会给你答案。您无法立即设置ListView的滚动位置,因为ListView的布局尚未完成,因此尝试将其滚动到某个位置是徒劳的。因此,您必须等到ListView进入其计算布局的状态。这是怎么......
myListView.onloadingstatechanged = function () {
if (app.sessionState.homeScrollPosition && myListView.loadingState == "viewPortLoaded") {
myListView.scrollPosition = app.sessionState.homeScrollPosition;
app.sessionState.homeScrollPosition = null;
}
};
通过查看我的开源codeSHOW project中的/pages/home/home.js文件,您可以在上下文中看到这一点。 希望有所帮助。