我有一个用RecyclerView
(android: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);
我的myImageAdapter
是RecyclerView.Adapter<?>
的衍生物,但没什么特别的。
我希望我很清楚我想要实现的目标。请告诉我,如果没有,我会创建一个图形来说明。
//来自GridLayoutManager
docs:“GridLayoutManager不支持stackFromEnd。”好像我不能使用它。
答案 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);
添加项目后。