我有一个带有自定义适配器的GridView,向用户显示图片的缩略图。我可以选择和取消选择图片(我在视图上使用setAlpha(0.25)来通知用户更改),这一切都很好。
现在我想要做的是,在gridview顶部有一个按钮,清除整个选择,即在所有已更改的视图上调用setAlpha(1.0)。到目前为止,我可以重置适配器中的元素,并且我可以将alpha设置为1,但视图不会更新,除非我将其滚出显示,然后返回到它,或通知适配器更改,它会重新绘制我的所有视图,如果只选择了一个元素,则看起来不太漂亮。
我已经通过GridView的onClickListener动态设置和重置了各个元素,但是不能这样做。我甚至尝试通过我的按钮调用所有选定项目上的performClick,但它再次只显示视图离开屏幕后再次显示的更改。
以下是我如何模拟点击次数:
for (int i = 0; i < mAdapter.getCount(); i++) {
PictureForSelection tempPic = (PictureForSelection) mAdapter.getItem(i);
if (tempPic.isPicSelected()) {
//tempPic.setIfSelected(false);
gridview.performItemClick(mAdapter.getView(i, null, null), i, i);
}
}
修改 结论 - 不要模拟这样的点击:)
所以现在我跳过点击模拟并使用它:
gridview.getChildAt(i).setAlpha((float) 1.0);
一般情况下,除了一个案例外,它完全符合我的要求:
如果显示所有选定的图片,它可以完美地工作,但是如果某些图片不在显示器中,则其他部分不会更新,直到Android调用适配器的getView()。不过,感谢@mmlooloo让我到目前为止。
如果有人知道解决方法,请分享:)
答案 0 :(得分:0)
设置完字母后,您可以拨打imageview.invalidate();
,这会导致您的imageview
自行重绘。
答案 1 :(得分:0)
如果notifyDataSetChanged()不起作用,您可以尝试这样做。 我不确定这是否有效,
1.单击你设置gridView.setAdapter(null)的按钮; 2.然后使用默认值将新的CustomAdapter对象设置为gridview。