いくつかのListView(日、時間、分など)で構成される時間選択ウィジェットを作成しています。議事録ListViewにはInteger.MAX_VALUE要素があります(0〜59を繰り返します)。ユーザーがリストをフリングするときはいつでも、0、15、30、または45で停止させたいです。setSelectionを使用しようとしましたが、適切な要素を選択しても、フリング速度が無効にならないため、リストはフリングを続けます。
何かアイデアがあれば助けてください。
ListView: public void SmoothScrollToPosition (int 位置)
多分これはあなたを助けるでしょう。使用したことはありませんが、解決策のようです。
ご協力いただきありがとうございます!試してみたところ、リストビューを停止しても、停止する位置が毎回微妙に異なっていたため、別の解決策を使用しました。
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 に設定しました。