我有不同的颜色为ListView中的不同行,通过设置文本框的颜色取决于行号(在适配器的getView())。现在,当我手动向上滚动ListView时,正确的颜色显示在显示的底部行中。但是当我使用scrollTo时,这不会发生,所有显示的行都具有相同的颜色(它们不会更新)。当使用scrollTo ListView不刷新,但手动滚动时刷新
有人遇到过这个问题吗?这似乎莫名其妙!
我有不同的颜色为ListView中的不同行,通过设置文本框的颜色取决于行号(在适配器的getView())。现在,当我手动向上滚动ListView时,正确的颜色显示在显示的底部行中。但是当我使用scrollTo时,这不会发生,所有显示的行都具有相同的颜色(它们不会更新)。当使用scrollTo ListView不刷新,但手动滚动时刷新
有人遇到过这个问题吗?这似乎莫名其妙!
ListView#scrollTo
不滚动列表内容。 (这是一种标准的View方法,并不特定于列表:它滚动ListView视图本身。)
而是尝试使用ListView#setSelectionFromTop(0, int y)
进行滚动。
如果您正在编写KitKat及更高版本,则API 19+具有ListView#scrollListBy(int y)
方法。
在我们的项目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);
}
}
}
}
我找相同的解决方案.... scrollTo不更新列表视图content..And使用setSelectionFromTop不滚动列表视图....我有'Y'值,但我不知道哪个位置滚动...任何线索? – VijayRaj 2014-04-18 07:32:47
如果使用位置为0的'setSelectionFromTop(int posittion,int y)',那么ListView将移动到列表的顶部。 'y'值是从该ListView项目的顶部边缘开始的距离。 (你可能不得不否定你的'y'值。) – Makario 2014-04-18 16:42:32
我试过'setSelectionFromTop(int posittion,int y)',其位置为0,但列表仍然保留在第一个位置(不滚动),而不管y价值...... – VijayRaj 2014-04-21 06:09:51