Question

The int "pos" is not passing correctly. How I can the to correct value when the ImageView is OnClick(). It seems when the listener activate the information is not accurate anymore.

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder vHolder;
    if (convertView != null)
        vHolder = (ViewHolder) convertView.getTag();
    else {
        convertView = mInflater.inflate(R.layout.car_list, null);
        vHolder = new ViewHolder();
        vHolder.textView = ((TextView) convertView.findViewById(R.id.tvCarListText));
        vHolder.textView2 = ((TextView) convertView.findViewById(R.id.tvCarDescriptionListText));
        vHolder.imageView = ((ImageView) convertView.findViewById(R.id.ivCarListMenuIcon));
        vHolder.relativeLayout = ((RelativeLayout) convertView.findViewById(R.id.relativeLayout));
        convertView.setTag(vHolder);


        CarItem c = mItems.get(position);
        final int pos = (int)c.getCarID();

        vHolder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showCarEditDialog(pos); //THIS IS PASSING WRONG <--------------
            }
        });
    }
    return convertView;
}
Was it helpful?

Solution

Use ImageView.setTag() to get position of clicked row on ImageVIew click as:

vHolder.imageView.setTag(pos);  // set current pos
vHolder.imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        showCarEditDialog(Integer.parseInt(v.getTag().toString()));
    }
});

OTHER TIPS

you can easily do it like this :

    public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder vHolder;
    if (convertView != null)
        vHolder = (ViewHolder) convertView.getTag();
    else {
        convertView = mInflater.inflate(R.layout.car_list, null);
        vHolder = new ViewHolder();
        vHolder.textView = ((TextView) convertView.findViewById(R.id.tvCarListText));
        vHolder.textView2 = ((TextView) convertView.findViewById(R.id.tvCarDescriptionListText));
        vHolder.imageView = ((ImageView) convertView.findViewById(R.id.ivCarListMenuIcon));
        vHolder.relativeLayout = ((RelativeLayout) convertView.findViewById(R.id.relativeLayout));
        convertView.setTag(vHolder);


    }

        vHolder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                showCarEditDialog((int)((CarItem)mItems.get(position)).getCarId);
            }
        });

    return convertView;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top