2012-06-07 3 views
8

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

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

+0

Не уверен, если это будет работать, но вы могли бы просто запросить по всем пунктам, создать массив из 20 последних в 'Cursor', что вернулся, а затем создать' MatrixCursor' из массива и использовать его для 'ListView'. См. Http://developer.android.com/reference/android/database/MatrixCursor.html – Squonk

ответ

9

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

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

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

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

+0

Спасибо, я думаю, что это лучший способ пойти. Я рассматривал подкласс Cursor для создания ReverseCursor, а также рассматривая возможность изменения ListView, но часть между ними - это четкий выбор. Я просто наблюдал за разговорами о вводе-выводе Romain в 2009 году на Android-производительности, которые намекали в этом направлении, благодаря указателю на разговор ListView. – bjdodson

0

Запрос для записей с использованием ключевого слова BETWEEN кажется самым простым решением для меня.

+0

Спасибо, BETWEEN полезен, но не работает для меня, так как я не хочу добавлять запрос, чтобы найти, где находится последний кусок данных. – bjdodson

10

Используйте этот GetItem Метод внутри адаптера для обратного порядка:

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

Не могли бы вы рассказать, как переопределить метод getItem() в адаптере? – Apurva

+0

@Apurva: У меня нет вашей проблемы здесь? Вам нужна аннотация переопределения. –

+0

Но оно показывает сообщение, что @Override здесь не разрешено. Я пытаюсь переопределить внутри метод onCreate – Apurva

1

Этого код работает для меня, когда извлекают данные из базы данных.

cs.moveToPosition(super.getCount() - position - 1); //cs is Cursor 
Смежные вопросы