如何在一个特定的列表项目中停止ListView,而它正在投掷?

时间:2012-07-24 12:03:52

标签: android listview

我正在编写一个时间选择器小部件,它包含多个ListView(天,小时,分钟等)。分钟ListView具有Integer.MAX_VALUE元素(反复重复0-59)。 每当用户甩动列表时,我希望它停止在0,15,30或45.我尝试使用setSelection,但即使它选择了正确的元素,它也不会使fling速度无效,因此列表会继续投掷。

如果您有任何想法,请帮助我。

2 个答案:

答案 0 :(得分:2)

ListView: public void smoothScrollToPosition (int position)

也许这会对你有所帮助。从来没有使用它,但看起来它可能是一个解决方案。

答案 1 :(得分: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;
}

然后在onScrollStateChanged方法中,如果是SCROLL_STATE_FLING,我将“已停止”布尔变量设置为false。