ด้านล่างนี้คือข้อมูลโค้ดที่มี ListView ฉันเพิ่ม emptyView และ headerView การเพิ่ม headerView ทำให้ตำแหน่งใน onItemClick เพิ่มขึ้นทีละตำแหน่ง
ดังนั้นหากไม่มี headerView องค์ประกอบรายการแรกจะมีตำแหน่ง 0 โดย headerView ตำแหน่งขององค์ประกอบรายการแรกจะเป็น 1!
สิ่งนี้ทำให้เกิดข้อผิดพลาดในอะแดปเตอร์ของฉันเช่นเมื่อเรียกใช้ getItem () และใช้วิธีการอื่น ๆ ดูด้านล่าง สิ่งที่แปลก: ในเมธอด getView () ของอะแด็ปเตอร์องค์ประกอบรายการแรกจะถูกร้องขอด้วยตำแหน่ง 0 แม้ว่าจะเพิ่ม headerView ก็ตาม !!
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
}
});
}
วิธีการบางอย่างของอะแดปเตอร์:
@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());
}
นี่เป็นพฤติกรรมปกติเมื่อเพิ่ม headerView หรือไม่? และจะเอาชนะปัญหาในอะแดปเตอร์ของฉันได้อย่างไร?