我有一个 2 Pane 布局。左边是一个ListView
,右边是一些与列表链接的内容。内容是可滚动的。
如果内容向前移动,我希望列表仅在该项目尚未显示时向前移动。这可以防止列表必须在每次内容更改时更新。我还希望该列表向前显示一整页。
有没有类似的东西
listView.isThisElementCurrentlyShown(int nr)
和
listView.moveAheadOnePage(int direction)
?
提前致谢。
最佳答案
这是 isThisElementCurrentlyShown(Element e)
的示例:
public boolean isThisElementCurrentlyShown(Element e){
ListView lv = getListView();
int start = lv.getFirstVisiblePosition();
for(int i=start, j=lv.getLastVisiblePosition();i<=j;i++){
if(e==lv.getItemAtPosition(i)){
return true;
}
}
return false;
}
这将告诉您该元素是否可见。
对于 moveAheadOnePage
,您应该能够使用 ListView 的内置函数 getFirstVisiblePosition()
和 getLastVisiblePosition()
来计算行数在该设备上可见,然后将 ListView 提前那么多位置。像这样的伪代码(你必须写这个):
public void moveAheadOnePage(int direction){//direction: 0-up, 1-down
int numVisibleRows = getLastVisiblePosition() - getFirstVisiblePosition();
this.setSelected(currentSelection + numVisibleRows) // +/- depending on direction
}
请注意,在 ListView 中滚动时,这些都是昂贵的调用,因此您一定要明智地实现~
编辑:更新代码以包含 return false
关于Android:ListView 条件滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467660/