[英]Android - dynamically update GridView views
我有一个带有自定义适配器的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使我走了这么远。
如果有人知道解决方法,请分享:)
设置Alpha之后,您可以调用imageview.invalidate();
这会导致您的imageview
重绘自身。
如果notifyDataSetChanged()无法正常工作,您可以尝试这样。 我不确定这是否有效,
1.onclick按钮设置gridView.setAdapter(null); 2.然后将一个新的CustomAdapter对象设置为带有默认值的gridview。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.