Между тем я кажется нашел решение.
Надо на каждое состояние создать по отдельной View'хе и уже в самом Adapter'е в зависимости от данных инстанцировать нужную View, пропихивать обработчик изменения состояния туда. При изменении состояния обновлять элемент данных и дергать обновление ListView.