Мне удалось получить закрепленные заголовки, работающие с демоверсией API ExpandableList1 .
Самой сложной проблемой, с которой я столкнулся, было выяснение, как заставить SectionIndexer хорошо играть с расширяющимися списками. Как было показано в моем вопросе, я думал об этом все неправильно. В своей первоначальной попытке решить эту проблему я создал объект SectionIndexer в MyExpandableAdapter и сопоставил его с моими данными, подобно тому, как это делается в приложении «Контакты» и в примере с Питером. Это работает в приложении «Контакты», поскольку позиции плоского списка статически соответствуют набору данных. В расширяемом виде списка позиции плоского списка меняются по мере того, как группы расширяются и исчезают.
Итак, решение состоит не в том, чтобы сопоставить индексатор раздела с данными, а с экземпляром вашего ExpandableListView. В этом решении вам даже не нужен объект SectionIndexer, как в примерах. Вам просто нужно обернуть методы реализации SectionIndexer вокруг методов ExpandableListView следующим образом:
@Override
public int getPositionForSection(int section) {
return mView.getFlatListPosition(ExpandableListView
.getPackedPositionForGroup(section));
}
@Override
public int getSectionForPosition(int position) {
return ExpandableListView.getPackedPositionGroup(mView
.getExpandableListPosition(position));
}
Есть, конечно, другие изменения, которые вы должны сделать, чтобы все это заработало, но описанные выше методы являются ключевыми. Я выложу полный код в код Google или GitHub и ссылку отсюда в ближайшее время. Списки ExpandableList с закрепленными заголовками выглядят великолепно!