我正在使用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现在在我滚动时更改其项目。即使项目有图片,ImageView也会消失。我该如何解决这个问题?
答案 0 :(得分: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()mehod:
if(isEnabled) {
textView.setText("ENABLED");
}
在这种情况下,textView将在滚动后始终显示文本ENABLED,因为textview将没有其他部分显示其他文本。 因此代码应如下所示:
if(isEnabled)
textView.setText("ENABLED");
else
textView.setText("DISABLED");
希望它会对你有所帮助。