我有一个 ListView,它覆盖了另一个视图,我称之为 Header。该标头可以具有各种高度。
在 ListView 的数据集上,我插入一个空白行,并以编程方式将此行的高度设置为我的 Header 视图的高度。这样,当 ListView 加载时,位置 1 处的行(实际的第一行数据)排在标题的底部。我这样做是为了可以将 Header 视图设置为部分透明,并且当用户滚动时,他们会看到数据行与 Header 视图的透明度混合在一起。
现在我有一个用例,我可以导航到此列表并选择给定的行。我所做的是使用位置 X 调用 setSelection。这将自动滚动我的 ListView,以便行 X 的顶部位于列表的顶部。但是,我的 Header 视图仍然掩盖了这一点。为了补偿我调用scrollTo。这两个部分是这样的:
listView.setSelection(selectedRowPosition);
if(hasHeadersEnabled()) {
listView.scrollTo(-headerView.getMeasuredHeight).
}
当我调用这些代码行时,我的 ListView 看起来与我预期的一样。所选行的顶部位于我的 HeaderView 的底部。我遇到的问题是,一旦用户触摸 ListView,滚动位置就会跳跃,以便所选行的顶部位于 ListView 的真正顶部(也称为 Header 视图的顶部)。
我的问题是,在 ListView 上 setSelectedRow 后,ListView 在开始使用 onTouch 事件进行滚动时是否总是期望该行的顶部是 ListView 的顶部?有没有另一种方法来完成我希望用这段代码做的事情?我尝试过 scrollTo 和 scrollBy ,两者都具有相同的效果。