Перевернутый ListView в Android?

есть ли простой способ отобразить ListView в обратном порядке? Я пытаюсь создать приложение на основе разговора и хотел бы, чтобы самые последние записи были внизу ListView. Я знаю о transcriptMode и stackFromBottom, однако моя проблема заключается в порядке данных.

скажем, у меня есть 100 элементов разговора и хотите отобразить элементы 80-100, причем 100 является самым последним элементом разговора. Я хотел бы показать 80-100, что подразумевает заказ по ID desc LIMIT 20 в моем запросе, который заставляет элементы сортироваться от 100 до 80, противоположно тому, что мне нужно. В настоящее время у меня есть неприятный внутренний код запроса, но я чувствую, что должно быть более простое решение, основанное на реверсировании курсора или просто инвертировании ListView.

4 ответов


внутри baseAdapter на getView() метод, вместо того , чтобы получать элемент в данных в индексе "позиция", используйте противоположное, что означает : numberOfItems минус позиция .

что касается отображения количества элементов, это также внутри baseAdapter: установите значение, возвращаемое getCount() быть тем,кем вы хотите, чтобы он был (20 в вашем примере, хотя 80-100 подразумевает, что он должен быть 21 ) .

кстати, кажется, вы являетесь стартером в случае управления ListView . могу я предложить посмотреть это видео: http://www.youtube.com/watch?v=wDBM6wVEO70

также проверьте api-демо, предоставляемые менеджером sdk . у них там много примеров.


использовать метод getitem метод внутри вашего адаптера для обратном порядке:

@Override
public Object getItem(int position) {
   return super.getItem(super.getCount() - position - 1);
}

этот код работает для меня при извлечении данных из базы данных.

cs.moveToPosition(super.getCount() - position - 1); //cs is Cursor

запрос записей, использующих ключевое слово BETWEEN, кажется мне самым простым решением.