Android - 动态更新GridView视图

时间:2014-10-14 12:40:23

标签: android gridview

我有一个带有自定义适配器的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让我到目前为止。

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

2 个答案:

答案 0 :(得分:0)

设置完字母后,您可以拨打imageview.invalidate();,这会导致您的imageview自行重绘。

答案 1 :(得分:0)

如果notifyDataSetChanged()不起作用,您可以尝试这样做。 我不确定这是否有效,

1.单击你设置gridView.setAdapter(null)的按钮; 2.然后使用默认值将新的CustomAdapter对象设置为gridview。