我对ListView中的不同行有不同的颜色,方法是根据行号设置文本框的颜色(在适配器的getView()中)。现在,当我向上手动滚动ListView时,正确的颜色显示在显示的底线中。但是当我使用scrollTo时,这不会发生,所有显示的行都具有相同的颜色(它们不会更新)。
有人遇到过这个问题吗?这看起来莫名其妙!
答案 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);
}
}
}
}