我的活动中有listview和imagebutton。 当我单击图像按钮时,我想要转到列表中的特定位置(我通过调用列表中的setSelection(int position)来执行此操作。 当用户fling listview然后单击图像按钮时,会出现问题。 列表转到指定位置但继续滚动。
例如。当我进入fling模式时,单击按钮,然后我转到第四个位置,但listview继续滚动,所以我最终选择了25
答案 0 :(得分:7)
我编写了一个简单的方法来使用反射停止scoll ListView。
private void stopScroll(AbsListView view)
{
try
{
Field field = android.widget.AbsListView.class.getDeclaredField("mFlingRunnable");
field.setAccessible(true);
Object flingRunnable = field.get(view);
if (flingRunnable != null)
{
Method method = Class.forName("android.widget.AbsListView$FlingRunnable").getDeclaredMethod("endFling");
method.setAccessible(true);
method.invoke(flingRunnable);
}
}
catch (Exception e) {}
}
只需调用stopScroll(myListView);当你需要停止滚动时。
答案 1 :(得分:7)
// Stop scrolling
smoothScrollBy(0, 0);
在内部,这将调用@Nik试图反映的方法。
答案 2 :(得分:1)
使用
listView.smoothScrollBy(0, 0); // to stop the scrolling.
// followed by
listView.setSelection(position) // to move to the specific position.
答案 3 :(得分:0)
您有一种手动滚动的方法 你可以调用listview.scrollTo(int,int); 但我不知道你怎么能计算滚动多少,我的意思是如何计算方法的参数。这也不会停止滚动它只是将你定位在一个特定的地方,然后停止滚动,所以你可能有一点点闪烁...... 如果没有解决你的问题,列表中会给出一些提示。
more关于方法
答案 4 :(得分:0)
我会尝试调用ListView.smoothScrollToPosition(int position)
滚动回正确的位置。由于所有的gui东西都是在一个线程中完成的,我认为没有机会真正停止按下按钮的滚动,所以最简单的就是向后滚动(这甚至可能是一个很好的gui效果)。
答案 5 :(得分:-2)
listView.clearAnimation()
吗?它可能会起作用