首页 > 解决方案 > 卡片堆栈刷卡 - 刷卡(移除)顶部卡片后在背面添加卡片

问题描述

我使用这个库:https ://github.com/yuyakaido/CardStackView 。就像Tinder 一样的左右刷卡,基于 RecyclerView。

这个库有以下设置:cardStackLayoutManager.setVisibleCount(3)- 这意味着任何时候可见卡的数量都被 MAXed 到 3 张卡。

假设我有一个包含 5 个元素的数组,然后我将所有内容加载到我的适配器。

在屏幕上,我将看到 3 张卡片 - 包含数组中的前三个元素。

问题是,当我刷最上面的卡片(从堆栈中删除它)时,我还剩下两张卡片,但我期待一张新卡片出现在底部,其中包含数组中的第 4 个元素,但它永远不会发生除非我从数组中删除第一个元素,然后调用:notifyDataSetChanged()它会重​​新加载整个堆栈、适配器(它会出现闪烁、闪烁等)

我只需要从底部新卡的数组中加载 NEXT 元素。

标签: android-recyclerviewswipe

解决方案


我想通了。首先,在适配器中,由于我随时只处理 3 张预装卡,因此我这样做:

int countCards;

SwipeAdapter(ArrayList<String> userIDArr, Context ctx)
{
    this.userIDArr2      = userIDArr;
    .......

    if (userIDArr2.size() >= 3) {
        countCards = 3;
    } else {
        countCards = userIDArr2.size();
    }
    .......

    this.ctx        = ctx;
}

@Override
public int getItemCount() {
    return countCards;
}

...前提是总数组userIDArr.size()可能大于 3,但getItemCount只能是 MAX 3 或更小(如果数组大小小于 3)。

然后,在处理适配器的 Activity 中,当我以任何方式刷卡时,我从数组中删除索引 0(顶部卡),然后调用notifyItemRemoved

userIDArr.remove(0);

if (userIDArr.size() > 2) {
    swipeAdapter.notifyItemRemoved(0);
}

NOTICE在数组仍有 3 个或更多项目notifyItemRemoved时调用。

工作非常顺利。


推荐阅读