Android 当滚动出视图时,将显示Imageviews

Android 当滚动出视图时,将显示Imageviews,android,listview,android-imageview,Android,Listview,Android Imageview,我真的很喜欢这个-好的,它是一个listview-两个ImageView-在左边所有listview项目必须每个都有一个图像-这就是所有在左边的都被填充了。但是-在右边,我只想用imageview填充3个listitems。我已经了解到,由于回收,其他的(我不想被填充的)必须设置为不可见。发生了什么-当启动应用程序时-右侧的3个图像视图第一次被看到-但是,当将它们从视图中滚动出来然后再返回时-它们都不见了 非常感谢你的帮助 public View getView(int position, Vi

我真的很喜欢这个-好的,它是一个listview-两个ImageView-在左边所有listview项目必须每个都有一个图像-这就是所有在左边的都被填充了。但是-在右边,我只想用imageview填充3个listitems。我已经了解到,由于回收,其他的(我不想被填充的)必须设置为不可见。发生了什么-当启动应用程序时-右侧的3个图像视图第一次被看到-但是,当将它们从视图中滚动出来然后再返回时-它们都不见了

非常感谢你的帮助

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

    ViewHolder holder;

    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.main, parent, false);
        holder = new ViewHolder();
        holder.textView = (TextView) convertView.findViewById(R.id.label);
        holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
        holder.infoView = (ImageView) convertView.findViewById(R.id.image_icon);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.textView.setText(values[position]);

    switch (position) {
        case 0:
            holder.imageView.setImageResource(R.drawable.conv);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 1:
            holder.imageView.setImageResource(R.drawable.counting);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 2:
            holder.imageView.setImageResource(R.drawable.travelling);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 3:
            holder.imageView.setImageResource(R.drawable.dating);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 4:
            holder.imageView.setImageResource(R.drawable.restaurant);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 5:
            holder.imageView.setImageResource(R.drawable.thaidishes);
            holder.infoView.setVisibility(View.GONE);
            break;  
        case 6:
            holder.imageView.setImageResource(R.drawable.time_);
            holder.infoView.setImageResource(R.drawable.imageicon);
            break;
        case 7:
            holder.imageView.setImageResource(R.drawable.time2);
            holder.infoView.setVisibility(View.GONE);
            break;  
        case 8:
            holder.imageView.setImageResource(R.drawable.colours);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 9:
            holder.imageView.setImageResource(R.drawable.weather);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 10:
            holder.imageView.setImageResource(R.drawable.directions);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 11:
            holder.imageView.setImageResource(R.drawable.emergency);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 12:
            holder.imageView.setImageResource(R.drawable.zoo);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 13:
            holder.imageView.setImageResource(R.drawable.shopping);
            holder.infoView.setVisibility(View.GONE);
            break;  
        case 14:
            holder.imageView.setImageResource(R.drawable.bank);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 15:
            holder.imageView.setImageResource(R.drawable.hotel);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 16:
            holder.imageView.setImageResource(R.drawable.countries);
            holder.infoView.setVisibility(View.GONE);
            break;
        case 17:
            holder.imageView.setImageResource(R.drawable.cities);
            holder.infoView.setImageResource(R.drawable.imageicon);
            break;
        case 18:
            holder.imageView.setImageResource(R.drawable.features);
            holder.infoView.setImageResource(R.drawable.imageicon);
            break;
    }

    return convertView;
}

循环使用时,您将ImageView的可见性设置为GONE,但对于具有第二个图像的元素,不会将其重置为VISIBLE。将此添加到应显示第二个图像的情况:

holder.infoView.setVisibility(View.VISIBLE);

我怎么强调都不过分,一个18箱的开关是不好的风格,很难使用,而且这种方法太长了。您应该重新思考代码的构造方式——将其分解为更多的方法或类

至于您的问题,您的视图正在被回收,所以一旦您将它们设置为“消失”,它们就消失了


您只是缺少一行:
holder.infoView.setVisibility(View.VISIBLE)在案例6、17和18中。

无需将回收视图设置为不可见。它们已经从屏幕上消失了,否则它们就不会被回收。是的,你是对的——糟糕的代码。我所能说的就是它的rahter old,我必须在适当的时候刷新它。还有更多——我必须学会在饿的时候休息一下,吃点东西——我怎么会是这样一个白痴-(不要对自己太苛刻,一定要吃。这一点非常重要。