java
java

Reputation: 1165

Imageviews dissappears when scroll out of view

I am going really crazy about this - Ok its a listview - two imageviews - to the left all listview-items must have one image each - that is all to the left are populated. But - to the right I only wants to populate 3 listitems with an imageview. And I have learned, due to recycling that the other ones (that I Do not want to be populated) must be set to invisible. What happends - when launching the app - the 3 imageviews to the right is first seen - BUT, when scrolling them out of view and then back - they are all gone.

very greatful for help

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;
}

Upvotes: 1

Views: 236

Answers (2)

Itai Hanski
Itai Hanski

Reputation: 8680

I can't stress enough that an 18 case switch is bad style and very hard to work with, and also that method is way too long. You should rethink the way your code is constructed - break it into more methods or classes.

As for your problem, you're views are being recycled, so once you set them to gone - they're gone.

You're just missing the line: holder.infoView.setVisibility(View.VISIBLE); in cases 6, 17 and 18.

Upvotes: 2

Coeffect
Coeffect

Reputation: 8866

You're setting the ImageView's visibility to GONE when recycling, but not resetting it to VISIBLE for the elements that have the second image. Add this to cases where the second image should show up:

holder.infoView.setVisibility(View.VISIBLE);

Upvotes: 1

Related Questions