0

ok i encounter a problem with this custom ArrayAdapter

public class AuthorsAdapter extends ArrayAdapter<Entity> {

    View row;
    static class ViewHolder {
        TextView textViewTitle;
        TextView textViewEntitySummary;
        ImageView imageViewPicture;
    }
    public AuthorsAdapter(Context context, LinkedList<Entity> entity) {
        super(context, 0, entity);
    }
    @Override
    public View getView( final int position,  View convertView,  final ViewGroup parent) {
        row = convertView;
        final ViewHolder holder;

        if (row == null) {
            row = LayoutInflater.from(getContext()).inflate(R.layout.listview_search_author_template, parent, false);
            holder = new ViewHolder();
            holder.textViewTitle = (TextView) row.findViewById(R.id.textView_TitleTopLeft);
            holder.textViewEntitySummary = (TextView) row.findViewById(R.id.textView_EntitySummary);
            holder.imageViewPicture = (ImageView) row.findViewById(R.id.imageView_author);
            row.setTag(holder);
        } else
            holder = (ViewHolder) row.getTag();


        holder.textViewTitle.setText(getItem(position).getTitle());
        if (!getItem(position).getPictureURL().isEmpty())
            Picasso.with(getContext()).load(getItem(position).getPictureURL()).into(holder.imageViewPicture);
        holder.textViewEntitySummary.setText(getItem(position).getBiography());


        holder.imageViewPicture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!getItem(position).isImageResized()) {
                    holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT));
                    getItem(position).setIsImageResized(true);
                } else if (getItem(position).isImageResized()) {
                    holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    getItem(position).setIsImageResized(false);

                } else {
                    holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));

                }

            }
        });


        return row;
    }

everything works well expected the imageView onclicklistener :

holder.imageViewPicture.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (!getItem(position).isImageResized()) {
                        holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                                LinearLayout.LayoutParams.WRAP_CONTENT,
                                LinearLayout.LayoutParams.WRAP_CONTENT));
                        getItem(position).setIsImageResized(true);
                    } else if (getItem(position).isImageResized()) {
                        holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                                LinearLayout.LayoutParams.WRAP_CONTENT,
                                LinearLayout.LayoutParams.MATCH_PARENT));
                        getItem(position).setIsImageResized(false);

                    } else {
                        holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                                LinearLayout.LayoutParams.WRAP_CONTENT,
                                LinearLayout.LayoutParams.MATCH_PARENT));

                    }

                }
            });


}

i want that the image change it size on click, it work but when i scroll down in my view, random other items in my listView get affected by clicking on first item... and when i come up in my listview the image is not resized anymore (at index where i clicked) any hints to make this working flawlessly?

2 Answers2

1
public class AuthorsAdapter extends ArrayAdapter<Entity> {


    static class ViewHolder {
        TextView textViewTitle;
        TextView textViewEntitySummary;
        ImageView imageViewPicture;
    }
    public AuthorsAdapter(Context context, LinkedList<Entity> entity) {
        super(context, 0, entity);
    }
    @Override
    public View getView( final int position,  View convertView,  final ViewGroup parent) {

        final ViewHolder holder;

        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.listview_search_author_template, parent, false);
            holder = new ViewHolder();
            holder.textViewTitle = (TextView) convertView.findViewById(R.id.textView_TitleTopLeft);
            holder.textViewEntitySummary = (TextView) convertView.findViewById(R.id.textView_EntitySummary);
            holder.imageViewPicture = (ImageView) convertView.findViewById(R.id.imageView_author);
            convertView.setTag(holder);
        } else{
          holder = (ViewHolder) convertView.getTag();
        }
                 if (!getItem(position).isImageResized()) {
                    holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT));
                    getItem(position).setIsImageResized(true);
                } else if (getItem(position).isImageResized()) {
                    holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    getItem(position).setIsImageResized(false);

                } else {
                    holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));

                }


        holder.textViewTitle.setText(getItem(position).getTitle());
        if (!getItem(position).getPictureURL().isEmpty())
            Picasso.with(getContext()).load(getItem(position).getPictureURL()).into(holder.imageViewPicture);
        holder.textViewEntitySummary.setText(getItem(position).getBiography());


        holder.imageViewPicture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
         if (!getItem(position).isImageResized()) {
                    holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT));
                    getItem(position).setIsImageResized(true);
                } else if (getItem(position).isImageResized()) {
                    holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));
                    getItem(position).setIsImageResized(false);

                } else {
                    holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.MATCH_PARENT));

                }

            }
        });


        return convertView;
    }
Ammar ali
  • 1,503
  • 1
  • 15
  • 24
-1

ok i found a workaround by referencing the

private  LinkedList<Entity> entity;
public AuthorsAdapter(Context context, LinkedList<Entity> entity) {
    super(context, 0, entity);
    this.entity = entity;
}

in the constructor then instead of doing like you said :

....  else{
              holder = (ViewHolder) convertView.getTag();
            }
                     if (!getItem(position).isImageResized()) {
                        holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                                LinearLayout.LayoutParams.WRAP_CONTENT,
                                LinearLayout.LayoutParams.WRAP_CONTENT));
                        getItem(position).setIsImageResized(true);
                    } else if (getItem(position).isImageResized()) {
                        holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                                LinearLayout.LayoutParams.WRAP_CONTENT,
                                LinearLayout.LayoutParams.MATCH_PARENT));
                        getItem(position).setIsImageResized(false);

                    } else {
                        holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                                LinearLayout.LayoutParams.WRAP_CONTENT,
                                LinearLayout.LayoutParams.MATCH_PARENT));

                    } .....

ive made an enhanced for loop like this :

....  else{
                  holder = (ViewHolder) convertView.getTag();
                }

for (Entity foo : entity) {
            if (!foo.isImageResized()) {
                holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                        25,
                        25));
            } else if (foo.isImageResized())
                holder.imageViewPicture.setLayoutParams(new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.MATCH_PARENT));

        } ....

note that i do some changes in my xml layout so now the image is right Under the title :) and i make it match parent to have bigger sized image...

btw thanks a lot for the hint @Ammar aly it really helped me