私の行には、アダプタのgetViewに独自のクリックリスナーが設定されたボタンが含まれています。行の親のandroid:descendantFocusability = "blocksDescendants"を使用して、ボタンのクリックと実際の行項目のクリックを区別することができます。Android:ListViewのボタンの背景をonClickで変更する
ボタンをクリックすると、ボタンの背景が正しく設定されます。私の問題は、リストをスクロールして別の行にも設定するためです。私は彼らの問題をどこかでリサイクルの見解を持つと仮定します。
@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に戻ってスクロールすると、ボタンの背景が元の位置に戻ってくることがあります。
私はここで何が欠けていますか?私はちょうど私がやっていないマイナーな何かがあることを知っている。
if(true || convertView == null){...(これは常に膨らんでいるので)、それは正常に動作しますか?解決策ではなく、問題がもう現れないかどうかを知りたいだけです。 –
他のランダムな行で背景が変わらないようにすることができます。明らかに、あなたが言ったような解決策ではありませんが、はい、スクロールアップしてボタンを元のバックグラウンドに戻すまで、問題は停止します。 – askilondz