Vous trouverez ci-dessous un extrait de code avec un ListView. J'ai ajouté un emptyView et un headerView. L'ajout de headerView entraîne une augmentation de la position dans onItemClick.
Donc, sans headerView, le premier élément de la liste aurait la position 0, avec l'en-têteView la position du premier élément de la liste serait 1!
Cela provoque des erreurs dans mon adaptateur, par exemple lors de l'appel de getItem () et de l'utilisation d'autres méthodes, voir ci-dessous. Chose étrange: dans la méthode getView () de l'adaptateur, le premier élément de liste est demandé avec la position 0 même si l'en-têteView est ajouté !!
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
}
});
}
Quelques méthodes d'adaptateur:
@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());
}
Est-ce le comportement normal lors de l'ajout d'un headerView? Et comment surmonter les problèmes de mon adaptateur?