Unten finden Sie ein Code-Snippet mit einer ListView. Ich habe eine leere Ansicht und eine Header-Ansicht hinzugefügt. Durch Hinzufügen der Header-Ansicht wird die Position im onItemClick um eins erhöht.
Ohne die HeaderView hätte das erste Listenelement also die Position 0, mit der HeaderView wäre die Position des ersten Listenelements 1!
Dies führt zu Fehlern in meinem Adapter, z. B. beim Aufrufen von getItem () und bei Verwendung anderer Methoden (siehe unten). Seltsame Sache: In der getView () -Methode des Adapters wird das erste Listenelement mit Position 0 angefordert, auch wenn die headerView hinzugefügt wird !!
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
}
});
}
Einige Adaptermethoden:
@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());
}
Ist dies das normale Verhalten beim Hinzufügen einer Header-Ansicht? Und wie kann ich die Probleme in meinem Adapter lösen?