Tôi biết có vài câu hỏi liên quan đến vấn đề này 'getView được gọi là vài lần' nhưng vấn đề của tôi có chút khác biệt.ListView - getView được gọi là quá nhiều lần
Tôi có danh sách tùy chỉnhXem với hàng tùy chỉnh (đã sử dụng row_layout.xml). Nó thường hoạt động tốt. Lúc đầu, tôi đã có một vấn đề với nhiều cuộc gọi đến getView và nó đã được cố định bằng cách sử dụng một trong những phương pháp tôi thấy ở đây trong stackoverflow. (sử dụng mảng 'usedPositions').
bây giờ, tôi thấy trong nhật ký trường hợp này: getView pos 0, getView pos 1, getView pos 0, getView pos 1. Điều này khiến hàng của tôi tăng gấp đôi. Nó chỉ xảy ra khi tôi gọi một hoạt động mới bao gồm hoạt động hiện tại và sau đó đóng hoạt động đó. (ví dụ, mở hoạt động của máy ảnh và sau đó đóng nó).
tôi sẽ hiển thị mã của tôi:
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
Toast toast = Toast.makeText(this.context, "getView " + position, 1000);
toast.show();
String pos = Integer.toString(position);
if (!usedPositions.contains(pos)) {
CardHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new CardHolder();
//holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
holder.txtCouponTitle = (TextView)row.findViewById(R.id.txtTitle);
holder.txtBusinessName = (TextView)row.findViewById(R.id.txtBusinessName);
row.setTag(holder);
}
else
{
holder = (CardHolder)row.getTag();
}
Card card = data.get(position);
holder.txtCouponTitle.setText(card.couponTitle);
holder.txtBusinessName.setText(card.businessName);
//holder.imgIcon.setImageResource(card.icon);
TableLayout table = (TableLayout)row.findViewById(R.id.imagesTable);
for (int r=1; r<=1; r++){
TableRow tr = new TableRow(this.context);
for (int c=1; c<=10; c++){
ImageView im = new ImageView (this.context);
im.setImageDrawable(this.context.getResources().getDrawable(c<= card.numberOfStamps ? R.drawable.stamp_red :R.drawable.stamp_grey));
im.setPadding(6, 0, 0, 0); //padding in each image if needed
//add here on click event etc for each image...
//...
tr.addView(im, 40,40);
}
table.addView(tr);
}
// Your code to fill the imageView object content
usedPositions.add(pos); // holds the used position
}
else
usedPositions.remove(pos);
return row;
}
Bạn có thể cho tôi biết chuyện gì vậy?
Bản sao có thể có của [phương pháp getView bộ điều hợp danh sách tùy chỉnh được gọi nhiều lần và không có thứ tự nhất quán] (http://stackoverflow.com/questions/2618272/custom-listview-adapter-getview-method-being-called- nhiều lần và không có đồng) – engincancan