R4j*_*R4j 5 android android-gridview
我使用StickyGridHeaders库来创建像snapfish一样的Gridview .这是我的预期布局:

触摸标题视图(红色箭头)上的按钮而不是复选框时,我会显示一个弹出窗口.问题是我的弹出窗口总是显示错误的位置.从调试窗口,我可以看到它与粘性标题具有相同的位置,但我通过使用关闭了gridview的粘性标题StickyGridHeadersGridView.setAreHeadersSticky(false);
这是我的适配器头:
public View getHeaderView(final int position, View convertView, ViewGroup parent) {
final HeaderViewHolder viewHolder;
if(convertView == null){
convertView = inflater.inflate(R.layout.item_header_gallery, null);
viewHolder = new HeaderViewHolder();
viewHolder.tvImagePrice = (TextView) convertView.findViewById(R.id.tvImagePrice);
viewHolder.btnTouch = (Button) convertView.findViewById(R.id.btnTouch);
convertView.setTag(viewHolder);
}else{
viewHolder = (HeaderViewHolder) convertView.getTag();
}
ImageGroup item = headers.get(position);
viewHolder.tvImagePrice.setText(item.getPriceString());
viewHolder.btnTouch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int[] location = new int[2];
viewHolder.btnTouch.getLocationOnScreen(location);
// location always is [905,59] for every header item
System.out.println("location = " + location[0] + "," + location[1]);
// show popup on this location:
mPopupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1]);
}
});
return convertView;
}
Run Code Online (Sandbox Code Playgroud)
如果我在子视图中显示弹出窗口而不是标题,则弹出窗口会正确显示.有什么不对?
看起来无法正确获取标题项位置,因为该库在StickyGridHeadersBaseAdapterWrapper中使用了附加和分离标题视图
HeaderFillerView v = getHeaderFillerView(adapterPosition.mHeader, convertView, parent);
View view = mDelegate.getHeaderView(adapterPosition.mHeader, (View)v.getTag(), parent);
mGridView.detachHeader((View) v.getTag());
v.setTag(view);
mGridView.attachHeader(view);
convertView = v;
mLastHeaderViewSeen = v;
v.forceLayout();
Run Code Online (Sandbox Code Playgroud)
实际上,它通过反射来调用视图类的dispatchAttachedToWindowand 。dispatchDetachedFromWindow正如所说,它导致整个屏幕上出现错误的窗口nosacky。
现在我退出并用 Listview 替换这个 StickyGridHeaders 标题项和 Gridview 项。这不是最好的方法,但它可以工作。
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |