ListView addHeaderView powoduje zwiększenie pozycji o jeden?

Poniżej znajduje się fragment kodu z ListView. Dodałem emptyView i headerView. Dodanie nagłówkaView powoduje zwiększenie pozycji w onItemClick o jeden.

Więc bez nagłówka Wyświetl pierwszy element listy miałby pozycję 0, z nagłówkiemZobacz pozycję pierwszego elementu listy 1!

Powoduje to błędy w moim adapterze, np. podczas wywoływania getItem () i przy użyciu innych metod, patrz poniżej. Dziwna rzecz: w metodzie getView () adaptera żądany jest pierwszy element listy z pozycją 0, nawet jeśli dodano nagłówekView !!

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
        }
    });
}

Niektóre metody adapterów:

@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());
}

Czy jest to normalne zachowanie podczas dodawania nagłówka? A jak rozwiązać problemy z moim adapterem?

questionAnswers(10)

yourAnswerToTheQuestion