停止在列表视图中滚动

发布于 2024-12-10 20:32:45 字数 199 浏览 1 评论 0原文

我的活动中有一个列表视图和一个图像按钮。 当我单击图像按钮时,我想转到列表中的特定位置(我通过调用列表上的 setSelection(intposition) 来实现此目的。 当用户滑动列表视图然后单击图像按钮时会出现问题。 列表将转到指定位置但继续滚动。

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

I have in my activity a listview and an imagebutton.
When I click the imagebutton I want to go to a specific position in the list (I do this by calling: setSelection(int position) on the list.
The problem occurs when the user flings the listview and then clicks the imagebutton.
The list goes to the specified position but continues scrolling.

eg. when I go into fling mode, click the button, then I go to the fourth position, but the listview keeps scrolling, so I end up with a selection of 25

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

∝单色的世界 2024-12-17 20:32:45

我已经编写了简单的方法来使用反射来停止 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);当你需要停止滚动时。

I have write simple method to stop scoll ListView using reflection.

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) {}
}

Just call stopScroll(myListView); when you need to stop scroll.

带上头具痛哭 2024-12-17 20:32:45
// Stop scrolling
smoothScrollBy(0, 0);

在内部,这将调用 @Nik 试图反映的方法。

// Stop scrolling
smoothScrollBy(0, 0);

Internally this will call the method that @Nik is trying to reflect.

战皆罪 2024-12-17 20:32:45

使用

listView.smoothScrollBy(0, 0); // to stop the scrolling.
// followed by
listView.setSelection(position) // to move to the specific position.

Use

listView.smoothScrollBy(0, 0); // to stop the scrolling.
// followed by
listView.setSelection(position) // to move to the specific position.
缪败 2024-12-17 20:32:45

您有一种手动滚动的方法
你可以调用 listview.scrollTo(int, int);
但我不知道如何计算滚动量,我的意思是如何计算方法的参数。另外,这不会停止滚动,它只是将您定位在特定位置,然后停止滚动,所以您可能会有点闪烁......
如果列表中的问题不能解决您的问题,则会给出一些提示。

关于该方法的更多

You have a method for manual scrolling
you can call listview.scrollTo(int, int);
But I do not have idea how can you calculate how much to scroll, I mean how to calculate the arguments of the method. Also this doesn't stop scrolling it just positions you at a specific place and then stop scrolling, so you might have a little flicker...
If doesn't solve you problem at list will give some hints.

more about the method

夏花。依旧 2024-12-17 20:32:45

我会尝试调用 ListView.smoothScrollToPosition(intposition) 滚动回到正确的位置。由于所有 gui 的东西都是在一个线程中完成的,我认为按下按钮时几乎没有机会真正停止滚动,所以最简单的就是向后滚动(这甚至可能是一个很好的 gui 效果)。

I would try calling ListView.smoothScrollToPosition(int position) to scroll back to the right position. As all the gui stuff is done in one thread I think there's little chance to really stop the scrolling on button press, so the easiest would be scrolling back (which might even be a nice gui effect too).

影子的影子 2024-12-17 20:32:45

您尝试过listView.clearAnimation()吗?可能有用

did you try listView.clearAnimation() ? it might work

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文