2015-06-16 3 views
0

Я использую GridView и CursorAdapter. Все элементы в GridView имеют разные типы, поэтому мой запрос к базе данных содержит много подзапросов и очень медленный.ListAdapter: Заполнять представления async, внешний запрос

Поэтому я решил использовать простой запрос (выберите только идентификаторы). Все подзапросы должны быть переданы асинхронно в CursorAdapter, как это (фиктивный код). А после запросов базы данных async элемент GridView обновляется.

@Override 
public void bindView(View view, Context context, Cursor cursor) { 

    long id = cursor.getLong(cursor.getColumnIndex(Columns._ID)); 
    ViewLoader.queue(id, view); 

} 

private class ViewLoader { 
    public queue(long id, View view) { 

    Bitmap bitmap = ... // load bitmap from web by using id 
    String title = ... // query title from database by using id 
    String subtitle = ... // query subtitle from database by using id 

    TextView titleView = (TextView) view.findViewById(R.id.title); 
    titleView.setText(title); 
    ... 

    // update GridView 
} 

Каков наилучший подход?

ответ

0

Я не думаю, что это лучший подход. Вся нить, перемещающаяся между пользовательским интерфейсом и обратной нитью, сделает вашу работу незадействующей. Я использовал курсор, который запросил более 4 таблиц с примерно 30-40 столбцами, и он работал нормально, я могу сказать довольно быстро. Я хочу сказать, что я думаю, что проблема связана с вашей привязкой. Изображения могут и должны быть закодированы async (я использую Picasso, но многие библиотеки могут сделать трюк). Я предполагаю, что u начните с запроса (попробуйте ограничить его до 30 строк, а затем мы используем технику разбиения на страницы, чтобы загрузить больше) и работайте с привязкой, и все будет отлично работать. Спросите свободно, если я не объяснил сам.

+0

Есть 27 (!) Подзапросов ... Я использую единственную таблицу, которая связана сама по себе ... Я уже использую метод ImageLoader и pagnition. – almisoft

+0

, например. Невозможно ли загрузить строку из базы данных из bindView() асинхронно и просто обновить информацию о записи gridView после этого? – almisoft

+0

Добавить код. Возможно, проблема в иерархии представлений. – EE66