微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 查找RecyclerView中第一个可见项的顶部偏移量

我有一个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);
    }
}

我认为很容易获得第一个可见项目位置的可见偏移量.防爆.如果第一个可见视图是300dp但只有最后200dp可见,我想获得100偏移量.

这样我就可以使用scrollToPositionWithOffset(firstVisiblePosition – 1,offsetTop).

在这里错过了什么吗?这似乎是一个容易解决的问题,但我还没有看到任何方法可以支持这一点.

解决方法

@黑带.感谢您让我走上正轨.

我需要的偏移实际上只是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);
    }
}

原文地址:https://www.jb51.cc/android/315908.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐