Is there a good reason for a ListView header taking up a position?
android, android-cursor, header, listview
Solution
For some reason the `position` (from the `onItemClick`) is tied up with the number of items in the `ListView` (not the adapter), including headers and footers. When you set an `OnItemClickListener` you should retrieve the clicked item by calling `listView.getItemAtPosition(position)` instead of `adapter.getItem(position)`.
In fact, you should always use the `getItemAtPosition`, because that way not matter if your `ListView` has headers and footers, and if you add new headers you won't need to change your code.
And if you don't want your header to be selectable, you should add it in this way: `listView.addHeaderView(headerView, null, false)`.
Problem
I've just added a header to my ListView and I have to change a bunch of code because the header essentially becomes position 0 (Meaning the Cursor indices of my CursorAdapter do not line up with the indicies of the list. They are off by 1 now). Why? This seems a bit silly to me. The only reason I can come up with is that a developer may want to access the header. Fine. Provide something like getListView().getHeader().