0

何百ものエントリを持つ可能性のある ListView があります。選択が行われると、私は SmoothScrollToPosition を使用しています。

if (lv != null) { //Are we created yet?
    lv.post(new Runnable() {
        public void run() {
            lv.smoothScrollToPosition(k);  
        }
    });
}

しかし、私のユーザーは、スクロール アニメーションが好きではなく、すぐにそこに移動したいと言っています。だから私はスムーズスクロールを

lv.setSelection(k);

...そして今では何もしません。FWIW これはすべて、 notifyDatasetChangedの直後に 発生しています

解決策を探しているときに、http://code.google.com/p/android/issues/detail ?id=6741 でこのディスカッションに出会いまし た。これは、これが既知の問題であることを意味します。回避策はありますか、それとも私がこれを間違っているだけですか?

前もって感謝します。

4

1 に答える 1

1

setSelection のドキュメントによると、ListView がタッチ モードの場合にのみ、選択された位置までスクロールします。おそらく、データ セットが変更されると、ListView はもはやタッチ モードではないか、次の UI 更新サイクルのために setSelection が忘れられているだけです。

setSelection を遅延して呼び出すことで、回避策を試すことができると思います。たとえば、100 ミリ秒の遅延で postDelayed メソッドを使用できます。または、ListView を拡張し、layoutChildren や、リスト ビュー アイテムの測定値を再計算するためにデータ セットが変更されたときにおそらく呼び出される関連するものをオーバーライドすることもできます。その時点で setSelection を安全に呼び出すことができ、遅延の推定に頼る必要はありません。

于 2012-07-09T20:51:23.360 に答える