2013-02-17 107 views
5

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

有人遇到过这个问题吗?这似乎莫名其妙!

回答

3

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

而是尝试使用ListView#setSelectionFromTop(0, int y)进行滚动。

如果您正在编写KitKat及更高版本,则API 19+具有ListView#scrollListBy(int y)方法。

+0

我找相同的解决方案.... scrollTo不更新列表视图content..And使用setSelectionFromTop不滚动列表视图....我有'Y'值,但我不知道哪个位置滚动...任何线索? – VijayRaj 2014-04-18 07:32:47

+0

如果使用位置为0的'setSelectionFromTop(int posittion,int y)',那么ListView将移动到列表的顶部。 'y'值是从该ListView项目的顶部边缘开始的距离。 (你可能不得不否定你的'y'值。) – Makario 2014-04-18 16:42:32

+0

我试过'setSelectionFromTop(int posittion,int y)',其位置为0,但列表仍然保留在第一个位置(不滚动),而不管y价值...... – VijayRaj 2014-04-21 06:09:51

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