我有一个ListView,它覆盖了另一个我称之为Header的视图。这个标题可以有各种高度。
在ListView的数据集上,我插入一个空白行,并以编程方式将此行的高度设置为我的标题视图的高度。这样,当ListView加载时,位置1的行(实际的第一行数据)排列在标题的底部。我这样做,所以我可以将Header视图设置为部分透明,当用户滚动时,他们会看到数据行与Header视图的透明度混合。
现在我有一个用例,我可以导航到此列表,并选择一个给定的行。我所做的是调用位置为X的setSelection。这将自动滚动我的ListView,使行X的顶部位于列表的顶部。但是,我的标题视图仍然模糊了这一点。为了补偿我调用scrollTo。这两件事就是这样的:
listView.setSelection(selectedRowPosition);
if(hasHeadersEnabled()) {
listView.scrollTo(-headerView.getMeasuredHeight).
}
当我调用这些代码行时,我的ListView看起来像我期望的那样。选定行的顶部位于HeaderView的底部。我遇到的问题是,只要用户触摸ListView,滚动位置就会跳转,以便所选行的顶部位于ListView的真正顶部(也就是Header视图的顶部)。
我的问题是,在ListView上setSelectedRow之后,当ListView开始使用onTouch事件进行滚动时,ListView是否始终期望该行的顶部是ListView的顶部?有没有其他方法可以实现我希望用这个代码做什么?我尝试过scrollTo和scrollBy,两者都有相同的效果。
答案 0 :(得分:1)
所以我应该更加努力地研究API。找到了我的问题的答案。
我需要使用setSelectionFromTop而不是setSelection和scrollTo的组合。以下是示例代码:
listView.setSelectionFromTop(rowPosition, headerView.getMeasuredHeight());