gpt4 book ai didi

Android RecyclerView 找出 ItemDecoration 上的第一个和最后一个 View

转载 作者:行者123 更新时间:2023-12-03 02:41:46 71 4
gpt4 key购买 nike

这是我的场景

  • 我必须在回收器 View 的第一个和最后一个项目上添加空间
  • 我正在使用 ItemDecoration

     recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {


    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    int totalHeight = parent.getHeight();
    int viewHeight = getResources().getDimensionPixelOffset(R.dimen.breadcrumb_btn_height);
    int padding = (totalHeight - viewHeight) / 2;
    //to position view on middle
    if (view.getTag() instanceof Integer) {
    int position = (int) view.getTag();
    if (position == 0) {
    //first position
    outRect.set(padding, padding, 0, padding);
    } else if (position == linearLayoutManager.getItemCount() - 1) {
    //last position
    outRect.set(0, padding, padding, padding);
    } else {
    outRect.set(0, padding, 0, padding);
    }
    }


    }
    });

    这里有

  • LinearLayoutManager水平方向

    我通过以下方式在 RecyclerView Adapter 上添加 position 标签

    @Override
    public void onBindViewHolder(BreadCrumbViewHolder holder, int position) {
    holder.setPosition(position);
    }

    是否有其他方法可以访问 ItemDecoration 上的 RecyclerView 第一个和最后一个子元素,以便稍后删除和添加项目时不会出现任何问题。

最佳答案

Is there any other way to access RecyclerView first and last child on ItemDecoration so that later on removing and adding items won't have any problem.

是的。您只需实现自己的 ItemDecoration 即可实现您想要的效果。

获取当前项目/子位置:

int position = parent.getChildAdapterPosition(view);

要获取项目/子项的数量:

int itemCount = state.getItemCount();

通过此功能,您可以在 RecyclerView 的第一个和最后一个子级上添加一个空格

<小时/>

现在更改您的代码以实现此方法:

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);

//your padding...

final int itemPosition = parent.getChildAdapterPosition(view);
if (itemPosition == RecyclerView.NO_POSITION) {
return;
}

final int itemCount = state.getItemCount();

/** first position */
if (itemPosition == 0) {
outRect.set(padding, padding, 0, padding);
}
/** last position */
else if (itemCount > 0 && itemPosition == itemCount - 1) {
outRect.set(0, padding, padding, padding);
}
/** positions between first and last */
else {
outRect.set(0, padding, 0, padding);
}
}
<小时/>

奖励:如果您希望为 RecyclerView 的所有项目提供填充,请查看我创建的要点:https://gist.github.com/ryanamaral/93b5bd95412baf85a81a

关于Android RecyclerView 找出 ItemDecoration 上的第一个和最后一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29666598/

71 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com