当前位置: 首页 > 知识库问答 >
问题:

如何在RecycerView中实现粘贴页脚

尹小云
2023-03-14
    null

请告知我如何实现此行为。

共有1个答案

叶冥夜
2023-03-14

您可以使用RecycerView.ItemDecordation来实现此行为。

public class StickyFooterItemDecoration extends RecyclerView.ItemDecoration {

    /**
     * Top offset to completely hide footer from the screen and therefore avoid noticeable blink during changing position of the footer.
     */
    private static final int OFF_SCREEN_OFFSET = 5000;

    @Override
    public void getItemOffsets(Rect outRect, final View view, final RecyclerView parent, RecyclerView.State state) {
        int adapterItemCount = parent.getAdapter().getItemCount();
        if (isFooter(parent, view, adapterItemCount)) {
            //For the first time, each view doesn't contain any parameters related to its size,
            //hence we can't calculate the appropriate offset.
            //In this case, set a big top offset and notify adapter to update footer one more time.
            //Also, we shouldn't do it if footer became visible after scrolling.
            if (view.getHeight() == 0 && state.didStructureChange()) {
                hideFooterAndUpdate(outRect, view, parent);
            } else {
                outRect.set(0, calculateTopOffset(parent, view, adapterItemCount), 0, 0);
            }
        }
    }

    private void hideFooterAndUpdate(Rect outRect, final View footerView, final RecyclerView parent) {
        outRect.set(0, OFF_SCREEN_OFFSET, 0, 0);
        footerView.post(new Runnable() {
            @Override
            public void run() {
                parent.getAdapter().notifyDataSetChanged();
            }
        });
    }

    private int calculateTopOffset(RecyclerView parent, View footerView, int itemCount) {
        int topOffset = parent.getHeight() - visibleChildsHeightWithFooter(parent, footerView, itemCount);
        return topOffset < 0 ? 0 : topOffset;
    }

    private int visibleChildsHeightWithFooter(RecyclerView parent, View footerView, int itemCount) {
        int totalHeight = 0;
        //In the case of dynamic content when adding or removing are possible itemCount from the adapter is reliable,
        //but when the screen can fit fewer items than in adapter, getChildCount() from RecyclerView should be used.
        int onScreenItemCount = Math.min(parent.getChildCount(), itemCount);
        for (int i = 0; i < onScreenItemCount - 1; i++) {
            totalHeight += parent.getChildAt(i).getHeight();
        }
        return totalHeight + footerView.getHeight();
    }

    private boolean isFooter(RecyclerView parent, View view, int itemCount) {
        return parent.getChildAdapterPosition(view) == itemCount - 1;
    }
}

确保为RecycerView的高度设置match_parent。

请查看示例应用程序https://github.com/johnkuper/recycerview-sticky-footer及其工作原理http://sendvid.com/nbpj0806

 类似资料:
  • 本文向大家介绍js实现图片粘贴到网页,包括了js实现图片粘贴到网页的使用技巧和注意事项,需要的朋友参考一下 本文实例实现通过按下ctrl + v将粘贴板上的图片粘贴到网页中,话不说直接上代码 演示结果 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍javascript在网页中实现读取剪贴板粘贴截图功能,包括了javascript在网页中实现读取剪贴板粘贴截图功能的使用技巧和注意事项,需要的朋友参考一下 见某网站的输入框支持截屏粘贴的功能,觉得有点意思,于是将代码扒出来分享下。 可惜,目前仅有高版本的 Chrome 浏览器支持这样直接粘贴,其他浏览器目前为止还无法粘贴( IE11没测试过 ),当然这种增强型的用户体验功能有总比没

  • 问题内容: 我知道position:fixed会很容易,但是不幸的是,我坚持支持IE6。如何做到这一点?我宁愿使用CSS进行清理,但是如果我必须使用Javascript,那还不是世界末日。在我当前的实现中,我有一个“浮动页脚”,它浮动在主要内容区域上方,并使用Javascript定位。我现在拥有的实现即使使用Java脚本也不是特别优雅,所以我的问题是: 没有Java,有没有办法做到这一点? 如果必

  • 本文向大家介绍javascript实现复制与粘贴操作实例,包括了javascript实现复制与粘贴操作实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript实现复制与粘贴操作的方法。分享给大家供大家参考。 具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 问题内容: 我想从Java中的系统剪贴板中粘贴。我该怎么做? 问题答案: 尽管机器人类可以工作,但它不像直接使用系统剪贴板那样优雅,例如:

  • 我有一个警告框,在文本输入区域显示一个URL,并将链接复制到剪贴板。我希望能够打开一个新的标签,并粘贴到地址栏的URL。 我试过: