Tôi đang sử dụng BaseAdapter tùy chỉnh để hiển thị các mục trên một ListView. Các mục chỉ là các chuỗi được giữ trong một ArrayList.Xóa các mục khỏi một ListView bằng cách sử dụng BaseAdapter tùy chỉnh
Các mục danh sách có nút xóa trên chúng (X lớn màu đỏ) và tôi muốn xóa mục khỏi ArrayList và thông báo cho ListView để cập nhật chính nó.
Tuy nhiên, mọi triển khai tôi đã thử đều nhận được số vị trí bí ẩn, vì vậy, ví dụ như nút xóa mục 2 sẽ xóa mục 5. Dường như nó gần như hoàn toàn ngẫu nhiên.
Một điều cần lưu ý là các thành phần có thể được lặp lại, nhưng phải được giữ theo cùng một thứ tự. Ví dụ, tôi có thể có "Irish" hai lần, như các yếu tố 3 và 7.
Mã của tôi là dưới đây:
private static class ViewHolder {
TextView lang;
int position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.language_link_row, null);
holder = new ViewHolder();
holder.lang = (TextView)convertView.findViewById(R.id.language_link_text);
holder.position = position;
final ImageView deleteButton = (ImageView)
convertView.findViewById(R.id.language_link_cross_delete);
deleteButton.setOnClickListener(this);
convertView.setTag(holder);
deleteButton.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.lang.setText(mLanguages.get(position));
return convertView;
}
sau tôi cố gắng để lấy lại vị trí các yếu tố xóa bằng cách lấy thẻ, nhưng nó luôn luôn vị trí sai trong danh sách. Không có mô hình đáng chú ý đến vị trí được đưa ra ở đây, nó luôn luôn có vẻ ngẫu nhiên.
// The delete button's listener
public void onClick(View v) {
ViewHolder deleteHolder = (ViewHolder) v.getTag();
int pos = deleteHolder.position;
...
...
...
}
Tôi rất vui khi chỉ xóa mục khỏi ArrayList và có bản cập nhật ListView, nhưng vị trí tôi nhận được không đúng nên tôi không thể làm điều đó. Xin lưu ý rằng tôi đã làm, lúc đầu, có clickButton clickListener bên trong phương thức getView, và sử dụng 'vị trí' để xóa giá trị, nhưng tôi đã có cùng một vấn đề.
Bất kỳ đề xuất nào được đánh giá cao, điều này thực sự gây khó chịu cho tôi.
Thật tuyệt vời, cảm ơn bạn. Không thể tin rằng tôi đã dành quá nhiều thời gian cho một vấn đề ngớ ngẩn như vậy. Tôi đã thêm giải pháp chung của tôi làm câu trả lời riêng cho những người quan tâm. – HXCaine