Allow Recyclerview Items to scroll past top of Recyclerview

孤街浪徒 提交于 2020-05-13 07:27:53

问题


I have a RecyclerView list, in which I want the currently selected item to be shown at the top of the RecyclerView. I still however, want the entire list to be scrollable, therefore, removing views from above the selected item is not a possible solution.

It seems I need a mechanism where the RecyclerView items are able to scroll beyond the bounds of the RecyclerView. I'm not sure if this is possible, so if it is not, does anyone have a solution to ensuring the currently selected item scrolls to the top of the RecyclerView.

I have tried smoothScrollToPosition() but this doesn't work in the case of being at the bottom of the RecyclerView, and wanting one of the middle items to scroll to the top.

Many thanks

to Illustrate, I have a list of 4 items, the recyclerview cannot scroll as there is not enough items in the list.

Then I select an item

I then want the selected item to scroll to top, but for the item above to still be scrollable.

So, when I scroll up...


回答1:


On the RecyclerView set a bottom padding that is equal to three times your item's height then set android:clipToPadding="false". This will let your bottom item scroll to the top and show the padding on the bottom item but only on the bottom item.

Here is an answer to a similar question that lays this technique out rather well.




回答2:


lets assume that you have item on click listener for your recycler view, when user clicks on any item you get item position and view, below code is working for me

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);

                }
            });

make sure your layout manager comes from support library like this

android.support.v7.widget.LinearLayoutManager

otherwise you will not find findFirstVisibleItemPosition() method etc



来源:https://stackoverflow.com/questions/49033795/allow-recyclerview-items-to-scroll-past-top-of-recyclerview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!