Неправильная последовательность позиций в списке Android

У меня есть список около 20 пунктов. в каждой строке адаптера есть кнопка изображения, которая выполняет разные действия, когда я нажимаю на нее. когда я нажимаю элемент списка, мне удалось правильно получить номер позиции. но когда я нажимаю кнопку изображения, позиция, которую я получил, неверна. Вместо 0~19, но показывало 0 1 2 3 0 1 2 3 0 1 2 3 .....

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;        

    if (convertView == null) {
        convertView     = myInflater.inflate(R.layout.list_video, null);
        holder          = new ViewHolder();

        holder.rlContainer      = (RelativeLayout)  convertView.findViewById(R.id.rlContainer);
        holder.imageView        = (ImageView)       convertView.findViewById(R.id.ivLogo);
        holder.buttonBackground = (ImageView)       convertView.findViewById(R.id.ibButtonLebih);
        holder.tvtitle          = (TextView)        convertView.findViewById(R.id.tvTitle);

        holder.buttonBackground.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {               
                videoListClickListener.OnVideoMoreClickListener(position);
            }
        });

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


    return convertView;
}

person Jason    schedule 11.08.2012    source источник
comment
Вы должны поместить setTag вне оператора if/else, см. stackoverflow.com/a/5197476/661079   -  person Kenny C    schedule 11.08.2012
comment
Спасибо Кенни! Проблема решена!   -  person Jason    schedule 11.08.2012


Ответы (1)


Проблема решена! переместив onclicklistener и setTag за пределы if/else.

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;        

if (convertView == null) {
    convertView     = myInflater.inflate(R.layout.list_video, null);
    holder          = new ViewHolder();

    holder.rlContainer      = (RelativeLayout)  convertView.findViewById(R.id.rlContainer);
    holder.imageView        = (ImageView)       convertView.findViewById(R.id.ivLogo);
    holder.buttonBackground = (ImageView)       convertView.findViewById(R.id.ibButtonLebih);
    holder.tvtitle          = (TextView)        convertView.findViewById(R.id.tvTitle);

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

holder.buttonBackground.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {               
            videoListClickListener.OnVideoMoreClickListener(position);
        }
    });

    convertView.setTag(holder);


return convertView;

}

person Jason    schedule 11.08.2012