diff --git a/cardstackview/src/main/java/com/yuyakaido/android/cardstackview/CardStackLayoutManager.java b/cardstackview/src/main/java/com/yuyakaido/android/cardstackview/CardStackLayoutManager.java index fa11c0d2..f64d21c6 100644 --- a/cardstackview/src/main/java/com/yuyakaido/android/cardstackview/CardStackLayoutManager.java +++ b/cardstackview/src/main/java/com/yuyakaido/android/cardstackview/CardStackLayoutManager.java @@ -200,6 +200,20 @@ private void update(RecyclerView.Recycler recycler) { if (state.status == CardStackState.Status.PrepareSwipeAnimation && (state.targetPosition == RecyclerView.NO_POSITION || state.topPosition < state.targetPosition)) { if (Math.abs(state.dx) > getWidth() || Math.abs(state.dy) > getHeight()) { state.next(CardStackState.Status.SwipeAnimating); + + // ■ 概要 + // Recyclerから古いViewが返却されて、スワイプ済みのカードが表示される + // データソースは正しく更新されていて、あくまで表示だけが古い状態になる + // + // ■ 再現手順 + // 1. `removeAndRecycleView(getTopView(), recycler);` をコメントアウトする + // 2. VisibleCount=1に設定し、最後のカードがスワイプされたらページングを行うようにする + // 3. カードを1枚だけ画面に表示する(このカードをAとする) + // 4. Aをスワイプする + // 5. カードを1枚だけ画面に表示する(このカードをBとする) + // 6. ページング完了後はBが表示されるはずが、Aが画面に表示される + removeAndRecycleView(getTopView(), recycler); + state.topPosition++; final Direction direction = state.getDirection(); new Handler().post(new Runnable() {