我正在使用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);
答案 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。