3

いくつかのListView(日、時間、分など)で構成される時間選択ウィジェットを作成しています。議事録ListViewにはInteger.MAX_VALUE要素があります(0〜59を繰り返します)。ユーザーがリストをフリングするときはいつでも、0、15、30、または45で停止させたいです。setSelectionを使用しようとしましたが、適切な要素を選択しても、フリング速度が無効にならないため、リストはフリングを続けます。

何かアイデアがあれば助けてください。

4

2 に答える 2

2

ListView: public void SmoothScrollToPosition (int 位置)

多分これはあなたを助けるでしょう。使用したことはありませんが、解決策のようです。

于 2012-07-24T12:20:51.917 に答える
1

ご協力いただきありがとうございます!試してみたところ、リストビューを停止しても、停止する位置が毎回微妙に異なっていたため、別の解決策を使用しました。

if((firstVisibleItem % 60 == 13 || firstVisibleItem % 60 == 28 || firstVisibleItem % 60 == 43 || firstVisibleItem % 60 == 58) && !stopped)
{
    MotionEvent me = MotionEvent.obtain(10, SystemClock.uptimeMillis(),     MotionEvent.ACTION_DOWN, 0, 0, 0); 
    MotionEvent me2 = MotionEvent.obtain(10, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 0, 0, 0); 
    mMinutesListView.dispatchTouchEvent(me);
    mMinutesListView.dispatchTouchEvent(me2);
    mMinutesListView.setSelection(firstVisibleItem);
    stopped = true;
}

そして、SCROLL_STATE_FLING の場合の onScrollStateChanged メソッドで、「停止」ブール変数を false に設定しました。

于 2012-07-27T08:53:22.797 に答える