【问题标题】:Allow Recyclerview Items to scroll past top of Recyclerview允许 Recyclerview 项目滚动到 Recyclerview 顶部
【发布时间】:2018-02-28 16:05:09
【问题描述】:

我有一个RecyclerView 列表,我希望当前选中的项目显示在RecyclerView顶部。然而,我仍然希望整个列表是可滚动的,因此,从所选项目上方删除视图是不可能的解决方案。

看来我需要一种机制,使RecyclerView 项目能够滚动到RecyclerView 的边界之外。我不确定这是否可行,如果不是,是否有人有解决方案来确保当前选定的项目滚动到RecyclerView 的顶部。

我尝试过smoothScrollToPosition(),但如果位于RecyclerView 的底部并希望中间项目之一滚动到顶部,则此方法不起作用。

非常感谢

为了说明,我有一个包含 4 个项目的列表,recyclerview 无法滚动,因为列表中没有足够的项目。

然后我选择一个项目

然后我希望所选项目滚动到顶部,但上面的项目仍然可以滚动。

所以,当我向上滚动时...

【问题讨论】:

  • 一切皆有可能我的前任...只需从列表中删除所选项目并将其添加到列表的第一个位置,然后notifyItemRangeInserted(0, selected_position); recyclerView 将自动滚动到顶部... :)
  • 感谢您的评论,但我仍然希望所选项目上方的项目可以滚动到,我认为这不能解决这个问题。
  • 您想要自动滚动或者您想要用户滚动并且您想要将所选内容保持在其原始位置还是想要它在顶部?
  • 得到了我的朋友 :) 正在处理它
  • 您可以从列表和notifyDataSetChanged() 中删除所有项目直到选定位置,当用户尝试向上滚动时添加这些元素并再次notifyDataSetChanged()

标签: android android-recyclerview


【解决方案1】:

RecyclerView 上设置一个等于项目高度三倍的底部填充,然后设置android:clipToPadding="false"。这将使您的底部项目滚动到顶部并在底部项目上显示填充,但仅在底部项目上。

这是an answer 的一个类似问题,它很好地阐述了这种技术。

【讨论】:

  • 太棒了!谢谢
【解决方案2】:

假设您的回收站视图的点击监听器上有项目,当用户点击任何项目时,您会获得项目位置和视图,下面的代码对我有用

RecycleClick.addTo(firstRecyclerView).setOnItemClickListener(new RecycleClick.OnItemClickListener() {
                @Override
                public void onItemClicked(RecyclerView recyclerView, int position, View v) {
                    // YOUR CODE
                    int offset = position - yourRecyclerViewLayoutManager.findFirstVisibleItemPosition();
                    if (yourRecyclerViewLayoutManager.findFirstVisibleItemPosition() > 0) offset -= 1;
                    yourRecyclerViewLayoutManager.scrollToPositionWithOffset(position, offset);

                }
            });

确保您的布局管理器来自这样的支持库

android.support.v7.widget.LinearLayoutManager

否则你将找不到 findFirstVisibleItemPosition() 方法等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多