Android: Изменить фон кнопки в строке ListView с помощью onClick

Мои строки содержат кнопку, у которой есть собственный прослушиватель щелчков, установленный в getView моего адаптера. Я могу различать щелчки по кнопкам и фактические щелчки по элементам строки с помощью android: DecndantFocusability = "blocksDescendants" в родительском элементе строки.

Когда я нажимаю кнопку, она правильно устанавливает фон кнопки, моя проблема заключается в том, что когда я прокручиваю список, он также настраивает ее для разных строк. Я предполагаю, что у них где-то проблема с переработкой просмотров.

Вот мой код:

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

    if(convertView == null){

        holder = new ViewHolder();

        convertView = inflater.inflate(R.layout.todays_sales_favorite_row, null);
        holder.favCatBtn = (Button)convertView.findViewById(R.id.favCatBtn);            

        convertView.setTag(holder);

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

        holder.favCatBtn.setTag(position);
        holder.favCatBtn.setOnClickListener(this);

    return convertView;
 }

@Override
public void onClick(View v) {
    int pos = (Integer) v.getTag();
    Log.d(TAG, "Button row pos click: " + pos);
    RelativeLayout rl = (RelativeLayout)v.getParent();
    holder.favCatBtn = (Button)rl.getChildAt(0);
    holder.favCatBtn.setBackgroundResource(R.drawable.icon_yellow_star_large);

}

Итак, если я нажму кнопку в позиции 1 строки, фон кнопки изменится должным образом. Но затем, когда я прокручиваю список вниз, случайным образом устанавливаются и другие кнопки. Иногда, когда я прокручиваю назад до позиции 1, фон кнопки снова возвращается к исходному.

Что мне здесь не хватает? Я знаю, что я прав, это просто что-то незначительное, чего я не делаю.

7
задан askilondz 10 November 2011 в 01:30
поделиться