oubowu/PinnedSectionItemDecoration

点击事件回调方法onHeaderClick(View view, int id, int position)中,第一个参数(被点击的View)可能并不是真实标签中的view, 点击事件中刷新标签UI可能不生效

Opened this issue · 1 comments

点击事件回调方法onHeaderClick(View view, int id, int position)中,第一个参数(被点击的View)可能并不是真实标签中的view, 点击事件中刷新标签UI可能不生效

需求:在点击粘性标签后,刷新对应标签的UI。
异常现象:当列表中的粘性标签只有一个时,可以刷新标签UI,如果有多个粘性标签时,就不能正常刷新UI。
原因: 粘性标签显示时,需要通过adapter创建或复用一个粘性标签,此时通过position可以获取对应的holder,而在源码中ClickBounds类设置view的时候,同一个View id(除了holder.itemView) 只会设置一次。所以,在标签更新后,view没有重新设置。而点击事件是根据view所在区域进行判断和回调的,并不是对应的View真正的点击事件。
源码如下:
public void setClickBounds(int id, View view) { ClickBounds bounds; if (mBoundsArray.get(id) == null) { bounds = new ClickBounds(view, view.getLeft(), view.getTop(), view.getLeft() + view.getMeasuredWidth(), view.getTop() + view.getMeasuredHeight()); mBoundsArray.put(id, bounds); } else { bounds = mBoundsArray.get(id); bounds.setBounds( view.getLeft(), view.getTop(), view.getLeft() + view.getMeasuredWidth(), view.getTop() + view.getMeasuredHeight()); } }

解决: 在如上代码中,应该在mBoundsArray.get(id) != null的情况下也将view设置到bounds对象中,这样就可以了。
感谢楼主写的标签库,功能很好,简单易用。