5

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

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

4

2 回答 2

5

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

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

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

于 2014-03-22T16:58:32.583 回答
0

在我们的项目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);
        }
    }
}
}
于 2015-11-26T06:38:47.897 回答