Hàng của tôi chứa nút có trình nghe nhấp chuột riêng được đặt trong getView của bộ điều hợp của tôi. Tôi có thể phân biệt giữa số lần nhấp vào nút của mình và số lần nhấp vào mục hàng thực tế bằng cách sử dụng android: descendantFocusability = "blocksDescendants" trong phụ huynh của hàng.Android: Thay đổi nền nút trong ListView Row với onClick
Khi tôi nhấp vào nút, nó đặt nền nút chính xác, vấn đề của tôi là khi tôi cuộn qua danh sách, thiết lập nó cũng cho các hàng khác nhau. Tôi cho rằng vấn đề của họ là một nơi nào đó với chế độ xem tái chế.
Dưới đây là mã của tôi:
@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);
}
Vì vậy, nếu tôi bấm vào nút ở vị trí hàng 1 sự thay đổi nền nút như nó phải. Nhưng sau đó khi tôi di chuyển xuống danh sách các nút ngẫu nhiên khác cũng đang được thiết lập. Sau đó, đôi khi khi tôi cuộn lùi lại vị trí 1, nền của nút quay lại trở lại bản gốc lần nữa.
Tôi thiếu gì ở đây? Tôi biết tôi đang ở ngay đó chỉ là thứ gì đó nhỏ nhặt mà tôi không làm.
Khi bạn thay đổi thành (true || convertView == null) {... (vì vậy nó luôn luôn tăng cao), nó có hoạt động tốt không? Không phải là một giải pháp, chỉ muốn biết nếu vấn đề không xuất hiện sau đó nữa. –
Yea dừng nền thay đổi trên các hàng ngẫu nhiên khác. Rõ ràng không phải là giải pháp như bạn nói nhưng có nó dừng lại vấn đề cho đến khi tôi di chuyển trở lại lên và nút reverts trở lại nền ban đầu của nó. – askilondz