Dưới đây là đoạn mã có ListView. Tôi đã thêm một emptyView và một headerView. Thêm headerView làm cho vị trí trong onItemClick được tăng lên một.ListView addHeaderView khiến vị trí tăng lên một lần?
Vì vậy, không có tiêu đềXem phần tử danh sách đầu tiên sẽ có vị trí 0, với tiêu đềXem 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 thức khác, xem bên dưới. Điều 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ới 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 adapter:
@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 một headerView ?? Và làm cách nào để khắc phục sự cố trong bộ điều hợp của tôi?
Câu hỏi của bạn đã có câu trả lời cho câu hỏi của tôi. +1 –