Вроде, простенькая задачка, а правильного ответа найти пока не могу.
Есть ListView с адаптером к базе. В некоторый момент этот адаптер запускает новый запрос и заполняет список элементами. После того, как это сделано, мне нужно перемотать список к заранее известной позиции. Проблема в том, что пока список пустой, перемотка не работает. А никаких событий типа «список заполнен» я не нашел. Пока сделал небольшой хак: перед обновлением адаптера выставляю флаг «нужно перемотать», а в setViewValue проверяю его и если нужно вызываю setSelection, флаг сбрасываю. Вроде, работает, но как-то очень уж неаккуратно выглядит.
Нужна помощь зала: как лучше реализовать это дело?
Случайно откомментировал вместо ответа — см. ниже. Проверил. Сделал свой адаптер на базе SimpleCursorAdapter, переопределил notifyDataSetChanged. Сначала вызываю предка, потом прокручиваю список в нужную позицию. Работает, вроде. Так что спасибо за подсказку. :)
Да, я про это думал уже. Тут вот какая засада: скорее всего, ListView сам обновляется по этому же событию. И я не уверен, гарантируется ли определенный порядок вызова обработчиков. Боюсь получить трудноуловимые глюки, когда иногда первым срабатывает ListView и все работает, а иногда мой обработчик, а ListView в это время еще не заполнен.