1

我有一个图片库,其中我在当前选择的图片周围放置了一个红色边框(当用户第一次打开屏幕时,第一个被选中,所以我在第一个视图周围绘制边框)。

当我单击另一个项目时,我想在新项目中绘制红色边框并擦除前一个项目的红色边框。

问题是我无法更改onClick画廊事件内的边框。如果我改变它,什么也不会发生(我认为是因为画廊的项目没有被重绘)。我试图postInvalidate()在我的画廊变量和它的每个视图中调用 invalidate() ,但它不起作用!视图不会重绘(即,红色边框仅保留在图库的第一项中)。

有人知道这里发生了什么吗?

4

2 回答 2

3

在您的适配器代码中,保存一个int值,该值将是 selected 的位置View。在 的onItemClicked方法中,使用提供的位置Gallery更新变量。int然后,在该getView方法中,如果正在绘制的位置是选定位置,则绘制您的边框。您可以继续使用提供View的 in应用边框onItemClicked,或调用notifyDataSetChanged适配器。首选第一种方法,因为notifyDataSetChanged将重新创建每个可见View的 。

通常,您还需要检查它是否不是选定位置,以便您可以从重用的View. 但是,Gallery总是会创建一个新的View. convertView对于 a 始终为空Gallery

于 2012-05-04T03:14:13.067 回答
0

尝试使用 requestLayout(); 祝你好运。

于 2012-05-04T02:43:51.283 回答