Swipeable Recycler View监听器由视图寻呼机覆盖

时间:2015-05-31 10:22:16

标签: android android-recyclerview

我正在使用this库(swipeableRecyclerView)

刷卡时,CardView会移动一点距离然后片段开始移动。

即。使用库的回调实现的RecyclerView监听器工作,然后viewPager的滑动开始运作。

有没有办法克服这种情况?我有2个片段,所以我想做类似的事情:

右键滑动 - 调用RecyclerView侦听器并解除CardView 向左滑动 - 调用viewPager滚动并刷新片段。

代码:

SwipeableRecyclerViewTouchListener swipeTouchListener =
                new SwipeableRecyclerViewTouchListener(rv,
                        new SwipeableRecyclerViewTouchListener.SwipeListener() {
                            @Override
                            public boolean canSwipe(int position) {
                                return true;
                            }

                            @Override
                            public void onDismissedBySwipeLeft(RecyclerView recyclerView, int[] reverseSortedPositions) {
                                for (int position : reverseSortedPositions) {
                                    messages.remove(numbers.get(position));
                                    numbers.remove(position);
                                    adapter.notifyItemRemoved(position);
                                }
                                adapter.notifyDataSetChanged();
                            }

                            @Override
                            public void onDismissedBySwipeRight(RecyclerView recyclerView, int[] reverseSortedPositions) {
                                for (int position : reverseSortedPositions) {
                                    messages.remove(numbers.get(position));
                                    numbers.remove(position);
                                    adapter.notifyItemRemoved(position);
                                }
                                adapter.notifyDataSetChanged();
                            }
                        });

        rv.addOnItemTouchListener(swipeTouchListener);

1 个答案:

答案 0 :(得分:3)

回答我自己的问题。正如CommonsWare所共享的那样,我创建了自定义的View Pager,但遇到了相反的问题(viewpager不会刷卡,卡片也会刷卡)。

所以我对自定义viewPager进行了一些调整:

public class MyViewPager extends ViewPager {
    public MyViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected boolean canScroll(View v, boolean checkV, int dx, int x,
                                int y) {
        if (v instanceof MyRecyclerView) {
            if(dx>0)
                return(super.canScroll(v, checkV, dx, x, y));
            else
            return(true);
        }

        return(super.canScroll(v, checkV, dx, x, y));
    }
}

MyReceyclerView是我在一个片段中使用的自定义RecyclerView。 dx> 0确保如果我从右侧碎片到左侧,则会调用一个viewPager监听器,否则会从左向右滑动(删除)卡片。

结果:ViewPager按预期工作,同时用户刷卡/解卡。感谢CommonsWare。