停止在列表视图中滚动

时间:2011-10-19 09:25:24

标签: android listview scroll

我的活动中有listview和imagebutton。 当我单击图像按钮时,我想要转到列表中的特定位置(我通过调用列表中的setSelection(int position)来执行此操作。 当用户fling listview然后单击图像按钮时,会出现问题。 列表转到指定位置但继续滚动。

例如。当我进入fling模式时,单击按钮,然后我转到第四个位置,但listview继续滚动,所以我最终选择了25

6 个答案:

答案 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()吗?它可能会起作用