jef*_*don 6 android android-animation recycler-adapter android-recyclerview
我申请的利润率等于我对RecyclerView使用GridLayoutManager通过重写getItemOffsets()方法(见下面我的代码)。
但是,当从适配器中删除对象时,将在没有偏移的情况下调用删除动画。因此,酰胺化在与要去除的物体不同的位置开始。
我试图通过来获取位置,getSpanIndex(position)但是位置(parent.getChildAdapterPosition(view))返回,NO_POSITION因为调用时已将对象从适配器中移除getItemOffsets()。
有什么办法可以抵消我的情况吗?
@Override
public void getItemOffsets(Rect outRect, View view,
RecyclerView parent, RecyclerView.State state) {
GridLayoutManager mgr = parent.getLayoutManager();
int position = parent.getChildAdapterPosition(view);
if (position == RecyclerView.NO_POSITION) {
// here I need to access the position of the current element
// and call outRect.set(left, top , right, bottom);
// which is not possible because it is no longer in the adapter
return;
}
int spanCount = mgr.getSpanCount();
int spanSize = mgr.getSpanSizeLookup().getSpanSize(position);
int spanIndex = mgr.getSpanSizeLookup().getSpanIndex(position, spanCount);
if (spanIndex == spanCount-1) {
// last element
left = space / 2;
right = space;
} else if (spanIndex == 0) {
// first element
left = space;
right = space / 2;
} else {
// middle element
left = space / 2;
right = space / 2;
}
outRect.set(left, top, right, bottom);
}
Run Code Online (Sandbox Code Playgroud)
尝试使用视图LayoutParams。如果您不使用某些自定义LayoutManager,它应该包含您需要的信息。
int position = ((RecyclerView.LayoutParams) view.getLayoutParams()).getViewAdapterPosition();
Run Code Online (Sandbox Code Playgroud)
小智 5
事实上,从父母那里获得孩子的位置并不是一个好的决定。视图的实际状态可能与真实状态不同,因为同时正在工作,或者 ItemDecorator、LayoutManager、RecyclerView 来规则它们,或者 Adapter 来改变某些元素的位置。
\n\n更好的方法是,当要求 Recycler 为您提供某些视图的 ViewHolder 时。然后您可以获得所需的全部信息(getLayoutPosition()、getAdapterPosition())。
\n\nparent.getChildViewHolder(view).getLayoutPosition();\nparent.getChildViewHolder(view).getAdapterPosition;\nRun Code Online (Sandbox Code Playgroud)\n\n还有另一个建议,不是来自你的案例。如果您需要获取 ItemCount,请不要使用adapter.getItemCount(),最好从状态获取,因为 Adapter 和 Recycler 中的项目计数可能不同。
\n\nstate.getItemCount()\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3999 次 |
| 最近记录: |