【问题标题】:Stop scrolling in a listview停止在列表视图中滚动
【发布时间】:2011-10-19 09:25:23
【问题描述】:

我的活动中有一个列表视图和一个图像按钮。 当我单击图像按钮时,我想转到列表中的特定位置(我通过调用列表中的 setSelection(int position) 来做到这一点。 当用户抛出列表视图然后单击图像按钮时会出现问题。 列表转到指定位置但继续滚动。

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

【问题讨论】:

    标签: android listview scroll


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      // Stop scrolling
      smoothScrollBy(0, 0);
      

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

      【讨论】:

        【解决方案3】:

        使用

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

        【讨论】:

          【解决方案4】:

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

          more关于方法

          【讨论】:

          • 据我了解,scrollTo 方法并不是真正用于在列表视图中滚动,如果我错了,请纠正我
          • 好吧,例如,我使用了 scrollTo 方法将列表滚动到中间,或者说向下滚动一点,就像他们在浏览器中使用的功能一样滚动到地址栏的高度,所以当你打开一个链接时,你会得到全屏的内容,如果你想看到地址栏,你必须向上滚动一点。 . .打开浏览器,你会得到我想说的
          【解决方案5】:

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

          【讨论】:

          • 我已经尝试过这个并且它有效,但我不想让用户等待 10 秒才能到达列表中的正确位置
          【解决方案6】:

          你试过listView.clearAnimation() 吗?它可能会工作

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多