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在滚动时隐藏

Android - longpress listitem 上的应用程序屏幕变暗

Android 样式/阴影正确 ListItem 布局

如何从 ListItem 内部调用按钮?

如何清空android ListView控件的内容

Listitem 点击不适用于复选框 Android