1

我正在使用 Facebook SDK 开发适用于 Android 的应用程序。到目前为止,该应用程序会扫描特定页面提要并将所有帖子放入 GridView。我想要这样,如果当前位置的 imageArray 的值为空或 null(没有图片的帖子),那么它将 ImageView 可见性设置为 GONE 并使 TextView 占据整个项目。这是我的代码:

public View getView(int position, View v, ViewGroup parent) {

    MainListHolder mHolder;
    if (v == null) {
        mHolder = new MainListHolder();
        v = inflator.inflate(R.layout.list_item, null);
        mHolder.img1 = (ImageView) v.findViewById(R.id.preview);
        mHolder.txt2 = (TextView) v.findViewById(R.id.message);
        mHolder.txt3 = (TextView) v.findViewById(R.id.user_name);
        mHolder.txt4 = (TextView) v.findViewById(R.id.user_id);
        v.setTag(mHolder);
    } else {
        mHolder = (MainListHolder) v.getTag();
    }

    if (!imageArray.get(position).isEmpty()) {
        manager.DisplayImage(imageArray.get(position), loader, mHolder.img1);
    }
    else    {
        manager.DisplayImage(null, loader, mHolder.img1);
        mHolder.img1.setVisibility(ImageView.GONE);
    }
    mHolder.txt2.setText(messageArray.get(position));
    mHolder.txt3.setText(nameArray.get(position));
    mHolder.txt4.setText(idArray.get(position));

    return v;
}

问题是 GridView 现在在我滚动时更改了它的项目。即使item有图片,ImageView也会消失。我该如何解决?

4

1 回答 1

1

您的问题出在这部分代码中:

if (!imageArray.get(position).isEmpty()) {
    manager.DisplayImage(imageArray.get(position), loader, mHolder.img1);
}
else {
    manager.DisplayImage(null, loader, mHolder.img1);
    mHolder.img1.setVisibility(ImageView.GONE);
}

因此,如果 imageView 的图像不存在,则使 img1 GONE 消失。但是如果图像存在 img1 在滚动后仍然保持 GONE,因为您没有调用 mHolder.img1.setVisibility(ImageView.VISIBLE)。发生这种情况是因为当您滚动时,您的 listItem 视图正在回收,因此在适配器中您必须始终处理这两种情况。

所以你的代码看起来像这样:

if (!imageArray.get(position).isEmpty()) {
    mHolder.img1.setVisibility(ImageView.VISIBLE);
    manager.DisplayImage(imageArray.get(position), loader, mHolder.img1);
}
else {
    manager.DisplayImage(null, loader, mHolder.img1);
    mHolder.img1.setVisibility(ImageView.GONE);
}

更好地理解问题的示例:

想象一下列表适配器 getView() 方法中的这段代码:

if(isEnabled) {
   textView.setText("ENABLED");
}

在这种情况下,textView 将始终在滚动后显示文本 ENABLED,因为 textview 没有其他部分会显示其他文本。所以代码应该是这样的:

if(isEnabled) 
   textView.setText("ENABLED");
else
   textView.setText("DISABLED");

希望它会帮助你。

于 2013-07-11T23:12:17.940 回答