如何找出回收者视图被捕捉到的项目?

时间:2016-10-05 10:53:14

标签: java android android-recyclerview

我有一个回收站视图,使用LinearSnapHelper在用户滚动项时捕捉项目。现在,我想听一下快照,最好是获取被捕捉的项目的索引。但是,我无法确定是否有办法做到这一点。

最初,我认为LinearSnapHelper' s findTargetSnapPosition()会将索引返回到snap(如文档所述),但这不是真的。它为第一个项随机返回-1或0,当滚动列表时,它会被随机调用。有时,方法根本没有被调用;有时,索引不正确,有时它是正确的。似乎使用它来尝试查找索引是没有用的。

那么:我如何找出回收者视图捕捉到的项目?

1 个答案:

答案 0 :(得分:8)

我设法让这个工作。我不确定这是否是最好的解决方案,但这就是我所做的:

private int selectedPosition = -1;
private LinearLayoutManager layoutManager;
private RecyclerView recyclerView;

@Override
protected void onCreate(Bundle savedInstanceState) {

    ...

    LinearSnapHelper snapHelper = new LinearSnapHelper() {
        @Override
        public View findSnapView(RecyclerView.LayoutManager layoutManager) {
            View view = super.findSnapView(layoutManager);

            if (view != null) {
                final int newPosition = layoutManager.getPosition(view);

                if (newPosition != selectedPosition && recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) {
                    onViewSnapped(newPosition);
                    selectedPosition = newPosition;
                }

            }

            return view;
        }
    };

    ...
}

private void onViewSnapped(int index) {
    // YOUR CODE HERE
}