繁体   English   中英

Android-动态更新GridView视图

[英]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);

总的来说,它确实可以实现我想要的功能,除了一种情况:

  • 例如,如果我选择了3张图片,则其中一张不在屏幕上,一张被部分显示,而一张被完全显示,所显示的(甚至部分显示)不会更新其视图。

如果显示了所有选定的图片,则可以正常工作,但是如果其中一些不显示,则直到Android调用适配器的getView(),其余的图片才会更新。 尽管如此,还是感谢@mmlooloo使我走了这么远。

如果有人知道解决方法,请分享:)

设置Alpha之后,您可以调用imageview.invalidate(); 这会导致您的imageview重绘自身。

如果notifyDataSetChanged()无法正常工作,您可以尝试这样。 我不确定这是否有效,

1.onclick按钮设置gridView.setAdapter(null); 2.然后将一个新的CustomAdapter对象设置为带有默认值的gridview。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM