1

我想在特定项目上自动滚动我的 ListView。ListView 必须自动滚动到其索引中的项目。

listView.ensureVisible(itemIndex); 

但它不起作用。另一种选择:

yourListView.currentItem = { index: 8, hasFocus: true, showFocus: true }

它也失败了。

如何解决?

4

2 回答 2

1

通常,您必须将调用包装ensureVisible(index)在对 msSetImmediate 的调用中。不知道为什么会这样,可能是一个错误,但对我有用。例子:

msSetImmediate(function (){ listView.ensureVisible(4);} );

如果您查看setImmediate的文档(msSetImmediate 是 Microsoft 特定的实现),该功能被描述为:

请求在当前或待处理任务完成时调用函数,例如事件或屏幕更新。

这确实有点道理,因为它听起来像是确保所有列表视图动画等在进行调用以确保项目可见之前完成。

请参阅此线程以获取相关帖子:http ://social.msdn.microsoft.com/Forums/en-US/winappswithhtml5/thread/2f11e46f-9421-4e31-93d3-fca06563ec41/

于 2013-03-18T16:42:28.997 回答
0

我可能会给你一个答案。您不能立即设置 ListView 的滚动位置,因为 ListView 的布局尚未完成,因此尝试将其滚动到某个位置是徒劳的。因此,您必须等到 ListView 达到计算其布局的状态。就是这样...

myListView.onloadingstatechanged = function () {
    if (app.sessionState.homeScrollPosition && myListView.loadingState == "viewPortLoaded") {
        myListView.scrollPosition = app.sessionState.homeScrollPosition;
        app.sessionState.homeScrollPosition = null;
    }
};

通过查看我的开源codeSHOW 项目中的 /pages/home/home.js 文件,您可以在上下文中看到这一点。希望有帮助。

于 2013-03-19T16:35:38.383 回答