android - recycler 查看项目装饰,getItemOffsets 仅在最后添加的项目上调用

标签 android android-recyclerview item-decoration

我的回收站 View 附有元素装饰。它应该只在最后一项上添加大量填充。这很好用。但是,当我添加新项目时,getItemOffsets 仅针对最后一项(而不是 recycler view 中的每一项)调用。这样,我最终在每个项目上都有这么大的填充。

添加新 View 时,如何删除其余 View 的正确填充?我想以正确的方式添加项目以保留动画

public void onItemInserted(Card card, int position){
    cardList.add(card);
    notifyItemInserted(getItemCount() -1);
}

我的元素抵消方法:

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
    super.getItemOffsets(outRect, view, parent, state);
    outRect.top = horizontalSpace;
    outRect.bottom = horizontalSpace;
    outRect.left = horizontalSpace;
    outRect.right = 0;

    if (parent.getChildAdapterPosition(view) == parent.getChildCount() - 1){
       outRect.right = endSpace;
    }
}

最佳答案

getItemOffsets() 仅为最后一项调用。所以,旧元素的装饰永远不会被重新存储。发生这种情况是因为您调用了:notifyItemInserted(getItemCount() -1);

为了调用最后两项的 getItemOffsets(),您必须:

public void onItemInserted(){
    items++;
    int lastPosition = getItemCount() - 1;
    if(lastPosition > 0) {
        // Request to redraw last two items. So, new item will receive proper padding and old item will restore to the default position
        notifyItemRangeChanged(lastPosition - 1, lastPosition);
    } else {
        notifyItemChanged(lastPosition);
    }
}

此外,正如您自己提到的,您应该在 getItemOffsets() 期间使用 state.getItemCount() 而不是 parent.getChildAdapterPosition(view)

关于android - recycler 查看项目装饰,getItemOffsets 仅在最后添加的项目上调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56276953/

相关文章:

android - 使用来自letsencrypt的证书与 flutter

android - 健身数据 : merging multiple sources data

android - 如何根据日期和时间对我的 RecyclerView 进行排序

android - 如何将左侧和右侧的 ItemDecoration 都应用于 RecyclerView 项目?

android - 获取 View 在 GridLayoutManager 上的列号

android - Jetpack Compose LazyColumn 的 ItemDecoration 是什么?

java - 在 android 中填充列表时找不到资源

android - Visual Studio 2017 Cordova ;更改 Android 构建的目标文件夹

android - RecyclerView 不是真正的 wrap_content 在 ScrollView

android - 无法激活 java 类型 MvxRecyclerView 的 JNI 句柄