tyl*_*ach 9 android android-recyclerview linearlayoutmanager
我有一个RecyclerView + LinearLayoutManger,它使用一个包含聊天消息的适配器.我将聊天消息的数量限制在最近的100个.这个问题是,当我删除旧的聊天时,recyclerview中聊天的滚动位置会发生变化,因为索引0已被删除.我开始编写下面的代码:
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
View v = layoutManager.getChildAt(firstVisiblePosition);
if (firstVisiblePosition > 0 && v != null) {
int offsetTop = //need to get the view offset here;
chatAdapter.notifyDataSetChanged();
if (firstVisiblePosition - 1 >= 0 && chatAdapter.getItemCount() > 0) {
layoutManager.scrollToPositionWithOffset(firstVisiblePosition - 1, offsetTop);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为获得第一个可见项目位置的可见偏移很容易.防爆.如果第一个可见视图是300dp但只有最后200dp是可见的,我想获得100偏移量.
这样我就可以使用scrollToPositionWithOffset(firstVisiblePosition - 1,offsetTop).
我在这里错过了什么吗?这似乎是一个很容易解决的问题,但我还没有看到任何方法可以支持这一点.
tyl*_*ach 13
@黑带.感谢您让我走上正轨.
我需要的偏移实际上只是v.getTop();
我真正的问题在于getChildAt().显然getChildAt从第一个可见位置开始,而不是在适配器的位置.在这种情况下,文档编写得很糟糕.
这是结果代码.
int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
View v = layoutManager.getChildAt(0);
if (firstVisiblePosition > 0 && v != null) {
int offsetTop = v.getTop();
chatAdapter.notifyDataSetChanged();
if (firstVisiblePosition - 1 >= 0 && chatAdapter.getItemCount() > 0) {
layoutManager.scrollToPositionWithOffset(firstVisiblePosition - 1, offsetTop);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17282 次 |
| 最近记录: |