- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的回收站 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/
我的回收站 View 附有元素装饰。它应该只在最后一项上添加大量填充。这很好用。但是,当我添加新项目时,getItemOffsets 仅针对最后一项(而不是 recycler view 中的每一项)调
我通过覆盖 getItemOffsets() 方法(请参阅下面的代码)使用 GridLayoutManager 为我的 RecyclerView 应用相等的边距。 但是,当一个对象从适配器中移除时,移
我正在尝试创建一个 ItemDecoration,它将通过向最后一个项目动态添加填充来保持 RecyclerView 的最小高度。 要计算填充量,我需要知道所有 child 的总高度。我通过获取单个
我是一名优秀的程序员,十分优秀!