Dưới đây là đoạn mã với ListView. Tôi đã thêm một Chế độ xem trống và Chế độ xem tiêu đề. Việc thêm headerView làm cho vị trí trong onItemClick được tăng lên một.
Vì vậy, nếu không có headerView, phần tử danh sách đầu tiên sẽ có vị trí 0, với headerView, vị trí của phần tử danh sách đầu tiên sẽ là 1!
Điều này gây ra lỗi trong bộ điều hợp của tôi, ví dụ: khi gọi getItem () và sử dụng một số phương pháp khác, hãy xem bên dưới. Điều kỳ lạ: Trong phương thức getView () của bộ điều hợp, phần tử danh sách đầu tiên được yêu cầu ở vị trí 0 ngay cả khi headerView được thêm vào !!
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ListView list = (ListView) viewSwitcher.findViewById(R.id.list);
View emptyView = viewSwitcher.findViewById(R.id.empty);
list.setEmptyView(emptyView);
View sectionHeading = inflater.inflate(R.layout.heading, list, false);
TextView sectionHeadingTextView = (TextView) sectionHeading.findViewById(R.id.headingText);
sectionHeadingTextView.setText(headerText);
list.addHeaderView(sectionHeading);
list.setAdapter(listAdapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
listAdapter.getItem(position);
//Do something with it
}
});
}
Một số phương pháp bộ điều hợp:
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override
public int getItemViewType(int position) {
return (position < items.size()) ? ITEM_NORMAL : ITEM_ADVANCED;
}
@Override
public Product getItem(int position) {
return items.get(position);
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return (position < items.size());
}
Đây có phải là hành vi bình thường khi thêm headerView không ?? Và làm thế nào để khắc phục các sự cố trong bộ điều hợp của tôi?