【问题标题】:When using scrollTo ListView does not refresh, but when manually scrolling it refreshes使用 scrollTo ListView 时不会刷新,但手动滚动时会刷新
【发布时间】:2013-02-17 16:05:17
【问题描述】:

通过根据行号(在适配器的 getView() 中)设置文本框的颜色,我为 ListView 中的不同行设置了不同的颜色。现在,当我手动向上滚动 ListView 时,正确的颜色会显示在显示的底行中。但是当我使用 scrollTo 时,这不会发生,所有显示的行都有相同的颜色(它们没有更新)。

有人遇到过这个问题吗?这似乎令人费解!

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    ListView#scrollTo 不滚动列表内容。 (这是一种标准的 View 方法,根本不特定于列表:它会滚动 ListView 视图本身。)

    请尝试使用ListView#setSelectionFromTop(0, int y) 滚动。

    如果您正在为 KitKat 及更高版本编程,API 19+ 有一个 ListView#scrollListBy(int y) 方法。

    【讨论】:

    • 我正在寻找相同的解决方案....scrollTo 不会更新列表视图内容..并且使用 setSelectionFromTop 不会滚动列表视图....我有 'y' 值但是我不知道要滚动到哪个位置...有什么线索吗?
    • 如果您使用位置为 0 的 setSelectionFromTop(int posittion, int y)ListView 将移至列表顶部。 y 值是距该 ListView 项顶部边缘的距离。 (您可能必须否定您的 y 值。)
    • 我尝试将setSelectionFromTop(int posittion, int y) 的位置设为0,但无论y 的值如何,列表都保持在第一个位置(不滚动)......
    【解决方案2】:

    在我们的项目中ListView#setSelectionFromTop(0, int y) 没有任何作用。所以我们以兼容的方式破解了这个:

    class Hacks {
    
    static {
        Method trackMotionScroll = null;
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            try {
                trackMotionScroll = AbsListView.class
                        .getDeclaredMethod("trackMotionScroll", int.class, int.class);
                trackMotionScroll.setAccessible(true);
            } catch (NoSuchMethodException e) {
                Exceptions.crash(e);
            }
        }
        listViewTrackMotionScroll = trackMotionScroll;
    }
    
    public static void scrollListBy(ListView listView, int y) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            listView.scrollListBy(y);
        } else {
            try {
                listViewTrackMotionScroll.invoke(listView, -y, -y);
            } catch (Exception e) {
                Exceptions.crash(e);
            }
        }
    }
    }
    

    【讨论】:

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