使用scrollTo时ListView不刷新,但手动滚动时刷新

时间:2013-02-17 16:05:17

标签: android android-listview

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

有人遇到过这个问题吗?这看起来莫名其妙!

2 个答案:

答案 0 :(得分:4)

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

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

如果你正在为KitKat编程,API 19+有一个ListView#scrollListBy(int y)方法。

答案 1 :(得分:0)

在我们的项目ListView#setSelectionFromTop(0, int y)中没有任何效果。所以我们用compat风格破解了这个:

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