ListView addHeaderView увеличивает позицию на единицу?

Ниже приведен фрагмент кода с ListView. Я добавил пустой вид и заголовок. Добавление 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?? И как решить проблемы с моим адаптером?

95
задан d1rk 19 June 2012 в 17:41
поделиться