在顶部插入时,RecyclerView GridLayoutManager向下滚动

时间:2015-09-03 14:59:04

标签: android android-support-library android-recyclerview

我有一个用RecyclerViewandroid:support:v7.widget.RecyclerView)和GridLayoutManager填充屏幕的片段。支持库版本为 23.0.0

假设我每行都有三个项。当我在顶部插入三个新项目时,我希望一切都向下移动一行。如果我处于最顶端,我希望一切都向下移动一行,并在第一行看到我的三个新项目。而是视图保留在项目上。新项目已插入,但我必须向上滚动才能看到它们。除非我向上滚动,否则我甚至都不会意识到某些事情发生了变化。

如何通过插入项目的数量实现一切向下移动(即,它向上滚动或保持在相同的索引(移动))?

以下是我插入新项目的方法:

myImageAdapter.notifyItemRangeInserted(0, batch.size());

初​​始化:

final RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 1);
grid = (RecyclerView) rootView.findViewById(R.id.grid);
grid.setHasFixedSize(true)
grid.setLayoutManager(layoutManager);
grid.setAdapter(myImageAdapter);

我的myImageAdapterRecyclerView.Adapter<?>的衍生物,但没什么特别的。

我希望我很清楚我想要实现的目标。请告诉我,如果没有,我会创建一个图形来说明。

//来自GridLayoutManager docs:“GridLayoutManager不支持stackFromEnd。”好像我不能使用它。

2 个答案:

答案 0 :(得分:1)

您可以使用scrollToPosition()属性;

if(yourCurrentPosition < 3)
    layoutManager.scrollToPosition(0);
else
    layoutManager.scrollToPosition(yourCurrentPosition - 3);

在您的活动/片段中,您可以使用数据集观察者:

myImageAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
    @Override
    public void onItemRangeChanged(int positionStart, int itemCount) {
        super.onItemRangeChanged(positionStart, itemCount);
        if(positionStart < 3)
            layoutManager.scrollToPosition(0);
        else
            layoutManager.scrollToPosition(positionStart - 3);
    }
});

答案 1 :(得分:0)

试试这个:

RecyclerView.LayoutManager

public void scrollToPosition (int position)

示例:

layoutManager.scrollToPosition(0); 

添加项目后。