listitem中的Android listview imageview在滚动时隐藏
Posted
技术标签:
【中文标题】listitem中的Android listview imageview在滚动时隐藏【英文标题】:Android listview imageview in listitem gets hidden on scroll 【发布时间】:2011-07-26 11:19:42 【问题描述】:我在尝试动态设置列表项中imageview
的可见性和图像drawable
时遇到了这个奇怪的问题。当它最初加载时,它的显示完全正常,但是当我向上或向下滚动它时,一些图像没有显示出来。
代码如下:
@Override
public View getView(int position, View convertView, ViewGroup parent)
ViewHolder holder;
Alarm o = items.get(position);
if (convertView == null)
convertView = View.inflate(mcontxt, R.layout.facelistitem, null);
holder = new ViewHolder();
holder.ind = (ImageView) convertView.findViewById(R.id.imgind);
holder.name = (TextView) convertView.findViewById(R.id.txtname);
convertView.setTag(holder);
else
holder = (ViewHolder)convertView.getTag();
if (o != null)
String name;
StringBuilder strb = new StringBuilder().append(
pad(o.GetAlarmHour())).append(":").append(
pad(o.GetAlarmMinute()));
if (position == 0)
name = "Add Alarm";
else if ((o.getAlarmName() != null)
&& !o.getAlarmName().equals(""))
name = o.getAlarmName().trim() + " - " + strb.toString();
else
name = strb.toString();
//TextView tt = (TextView) v.findViewById(R.id.txtname);
//ImageView iv = (ImageView) v.findViewById(R.id.imgind);
if (holder.name != null)
holder.name.setText(name);
if (holder.ind != null)
if (name.equalsIgnoreCase("Add Alarm"))
holder.ind.setVisibility(View.INVISIBLE);
if (o.IsAlarmOn())
holder.ind.setImageDrawable(mcontxt.getResources().getDrawable(
R.drawable.alarmon));
else
holder.ind.setImageDrawable(mcontxt.getResources().getDrawable(
R.drawable.alarmoff));
/*
* if(bt != null) bt.setText("Status: "+ o.getOrderStatus());
*/
return convertView;
【问题讨论】:
【参考方案1】:整个ListView
变黑了吗?您可能需要设置:
android:cacheColorHint="@android:color/transparent"
在您的 ListView
上。
否则,您可能需要提供替代 INVISIBLE
设置:
if (name.equalsIgnoreCase("Add Alarm"))
holder.ind.setVisibility(View.INVISIBLE);
else
holder.ind.setVisibility(View.VISIBLE);
如果您不这样做,那么回收的视图有时会是 INVISIBLE
,而您并不打算这样做。
【讨论】:
【参考方案2】:您需要做的就是在 getView 中将图像设置为 VISIBLE,然后再将其设置为 INVISIBLE/GONE(如有必要)。
在我的特定示例中:
holder.ivImageLeft.setVisibility(View.VISIBLE);
holder.ivImageRight.setVisibility(View.VISIBLE);
if (i == 0)
holder.ivImageLeft.setVisibility(View.GONE);
else
holder.ivImageRight.setVisibility(View.GONE);
【讨论】:
以上是关于listitem中的Android listview imageview在滚动时隐藏的主要内容,如果未能解决你的问题,请参考以下文章
listitem中的Android listview imageview在滚动时隐藏