2012-09-15 40 views
8

Tôi là người mới lập trình Android và thực hiện các bước đầu tiên với Bộ điều hợp (cho một ListView).ghi đè Adapter.getView

Trọng sự Adapter.getView Tôi thường thấy những điều như thế này:

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

    View itemView = null; 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) parent.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.table_row, null); 
    } else { 
     itemView = convertView; 
    } 

    // play with itemView 

    return itemView; 
} 

Câu hỏi của tôi là những gì nói chống lại điều này:

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

    View itemView = super(position, convertView, parent); 

    // play with itemView 

    return itemView; 
} 

Điều này dường như làm việc cho tôi, nhưng tôi chắc chắn rằng có một lớn điểm tôi thiếu: D

Cảm ơn bạn đã đọc và xin lỗi vì tiếng anh xấu của tôi ...

Trả lời

6

Bạn có thể sử dụng

View itemView = super(position, convertView, parent); 

nếu chỉ có bạn được bắt nguồn từ "sẵn sàng để sử dụng" adapter (không BaseAdapter), như SimpleAdapter hoặc ArrayAdapter, vì họ đã được triển khai cho getView().

Hãy xem chúng: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361 cho ArrayAdapter và http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113 cho SimpleAdapter.

Nếu bạn lấy được từ BaseAdapter, bạn sẽ phải manualy thực hiện toàn bộ phương pháp, như bạn đã mô tả trong ví dụ đầu tiên, bởi vì nó không có nó ra khỏi hộp: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/BaseAdapter.java#BaseAdapter

1

Nếu bạn có nghĩa là đoạn mã này:

if (convertView == null) { 
    LayoutInflater inflater = (LayoutInflater) parent.getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    itemView = inflater.inflate(R.layout.table_row, null); 
} else { 
    itemView = convertView; 
} 

dường như không cần thiết cho bạn: đoạn mã này cho phép Android để tạo ra một số lượng tương đối nhỏ của tế bào (tương đương với số lượng của các tế bào có thể nhìn thấy trên màn hình của bạn + -), và sau đó "tái chế" các ô này - sử dụng chúng nhiều lần trong khi người dùng cuộn danh sách, thay vì tạo ô cho từng đối tượng trong mảng của bạn. này sẽ giúp bạn với:

  1. bộ nhớ tiết kiệm - bởi vì bạn không tạo view cho mỗi phần tử trong mảng của bạn

  2. Tiết kiệm sử dụng CPU - tạo ra một đối tượng xem ra file xml ("lạm phát ") là nhiệm vụ tương đối đắt tiền và làm như vậy cho mỗi mục trong mảng của bạn có thể làm tắc nghẽn chuỗi giao diện người dùng của bạn