Tôi có một bộ điều hợp danh sách tùy chỉnh:
class ResultsListAdapter extends ArrayAdapter<RecordItem> {
trong phương thức 'getView' bị ghi đè, tôi thực hiện in để kiểm tra vị trí nào và đó có phải là convertView hay không:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
Đầu ra của cái này (khi danh sách được hiển thị lần đầu tiên, chưa có đầu vào của người dùng)
04-11 16:24:05.860: INFO/System.out(681): getView 0 null
04-11 16:24:29.020: INFO/System.out(681): getView 1 android.widget.RelativeLayout@43d415d8
04-11 16:25:48.070: INFO/System.out(681): getView 2 android.widget.RelativeLayout@43d415d8
04-11 16:25:49.110: INFO/System.out(681): getView 3 android.widget.RelativeLayout@43d415d8
04-11 16:25:49.710: INFO/System.out(681): getView 0 android.widget.RelativeLayout@43d415d8
04-11 16:25:50.251: INFO/System.out(681): getView 1 null
04-11 16:26:01.300: INFO/System.out(681): getView 2 null
04-11 16:26:02.020: INFO/System.out(681): getView 3 null
04-11 16:28:28.091: INFO/System.out(681): getView 0 null
04-11 16:37:46.180: INFO/System.out(681): getView 1 android.widget.RelativeLayout@43cff8f0
04-11 16:37:47.091: INFO/System.out(681): getView 2 android.widget.RelativeLayout@43cff8f0
04-11 16:37:47.730: INFO/System.out(681): getView 3 android.widget.RelativeLayout@43cff8f0
AFAIK, mặc dù tôi không thể tìm thấy nó được nêu rõ ràng, getView () chỉ được gọi cho các hàng hiển thị. Vì ứng dụng của tôi bắt đầu với bốn hàng có thể nhìn thấy, ít nhất là các số vị trí quay vòng từ 0-3 có ý nghĩa. Nhưng phần còn lại là một mớ hỗn độn:
- Tại sao getview được gọi cho mỗi hàng ba lần?
- Những convertView này đến từ đâu khi tôi chưa cuộn?
Tôi đã làm một chút về nghiên cứu, và không nhận được câu trả lời tốt, tôi đã nhận thấy rằng mọi người đang liên kết vấn đề này với các vấn đề bố trí. Vì vậy, trong trường hợp, đây là cách bố trí có chứa danh sách:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/pageDetails"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ListView android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false" />
</LinearLayout>
và cách bố trí của từng hàng riêng lẻ:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="108dp"
android:padding="4dp">
<ImageView
android:id="@+id/thumb"
android:layout_width="120dp"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginRight="8dp"
android:src="@drawable/loading" />
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="18dp"
android:layout_toRightOf="@id/thumb"
android:layout_alignParentBottom="true"
android:singleLine="true" />
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="18dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:paddingRight="4dp"
android:singleLine="true" />
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="17dp"
android:layout_toRightOf="@id/thumb"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:paddingRight="4dp"
android:layout_alignWithParentIfMissing="true"
android:gravity="center" />
</RelativeLayout>
Cảm ơn bạn đã dành thời gian