特定の項目で ListView を自動的にスクロールしたい。ListView は、インデックスからアイテムに自動スクロールする必要があります。
listView.ensureVisible(itemIndex);
しかし、それは機能していません。別の方法:
yourListView.currentItem = { index: 8, hasFocus: true, showFocus: true }
そしてそれも失敗。
これはどのように解決できますか?
特定の項目で ListView を自動的にスクロールしたい。ListView は、インデックスからアイテムに自動スクロールする必要があります。
listView.ensureVisible(itemIndex);
しかし、それは機能していません。別の方法:
yourListView.currentItem = { index: 8, hasFocus: true, showFocus: true }
そしてそれも失敗。
これはどのように解決できますか?
ensureVisible(index)
通常、msSetImmediate への呼び出しで呼び出しをラップする必要があります。なぜこれが当てはまるのか正確にはわかりませんが、おそらくバグですが、私にとってはうまくいきます。例:
msSetImmediate(function (){ listView.ensureVisible(4);} );
setImmediate (msSetImmediate は Microsoft 固有の実装)のドキュメントを見ると、関数は次のように説明されています。
イベントや画面の更新など、現在のタスクまたは保留中のタスクが完了したときに関数が呼び出されるように要求します。
これは、アイテムが確実に表示されるようにするための呼び出しを行う前に、すべてのリスト ビューのアニメーション化などが確実に完了するように聞こえるため、少し意味があります。
関連する投稿については、次のスレッドを参照してください。
答えがあるかもしれません。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 ファイルを見ると、コンテキストで確認できます。それが役立つことを願っています。