public SectionedListViewAdapter(ListView listView, ListViewDataSource dataSource) { this.listView = listView; this.dataSource = dataSource; mapPosition = new HashMap<Integer, IndexPath>(); if (dataSource != null) { numberOfSections = dataSource.numberOfSectionsInListView(listView); numberSectionHeaders = 0; numberRegularRows = 0; int positionIndex = 0; for (int sectionIndex = 0; sectionIndex < numberOfSections; ++sectionIndex) { int numberRowsInSection = dataSource.listViewNumberOfRowsInSection(listView, sectionIndex); numberRegularRows += numberRowsInSection; String sectionHeader = dataSource.listViewTitleForHeaderInSection(listView, sectionIndex); if (sectionHeader != null) { mapPosition.put(Integer.valueOf(positionIndex), new IndexPath(sectionIndex, -1)); ++numberSectionHeaders; ++positionIndex; } for (int rowIndex = 0; rowIndex < numberRowsInSection; ++rowIndex) { mapPosition.put(Integer.valueOf(positionIndex), new IndexPath(sectionIndex, rowIndex)); ++positionIndex; } } } else { numberOfSections = 0; numberSectionHeaders = 0; numberRegularRows = 0; } numberViews = numberSectionHeaders + numberRegularRows; }