Di seguito è riportato uno snippet di codice con ListView. Ho aggiunto un emptyView e un headerView. L'aggiunta di headerView fa aumentare di uno la posizione in onItemClick.
Quindi senza headerView il primo elemento della lista avrebbe la posizione 0, con headerView la posizione del primo elemento della lista sarebbe 1!
Ciò causa errori nel mio adattatore, ad esempio quando si chiama getItem () e si utilizzano altri metodi, vedere di seguito. Cosa strana: nel metodo getView () dell'adattatore viene richiesto il primo elemento della lista con posizione 0 anche se viene aggiunto 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
}
});
}
Alcuni metodi di adattamento:
@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());
}
È questo il comportamento normale quando si aggiunge un headerView ?? E come superare i problemi nel mio adattatore?