2015-02-21 6 views
1

У меня есть приложение, в котором я загружаю значения базы данных в listview (несколько столбцов) с помощью SimpleCursorAdapter. Проблема в том, что данные растут каждый день, и приложение явно отстает, чтобы загрузить все данные за один раз в список.Как автоматически загружать большие значения базы данных в listview с помощью SimpleCursorAdapter

Я сделал много Google для этого, найдено много решений (некоторые с помощью AsyncTasks и некоторые используя OnScrollListener события), но я просто не в состоянии реализовать их с помощью SimpleCursorAdapter

Любого указателя здесь (специфичного для SimpleCursorAdapter) будет быть действительно здорово. может быть простейший фрагмент кода будет высоко оценен

Вот что мне делать, чтобы получить данные в ListView,

@Override 
public void onResume() { 
    cursor = getDBData(sql); // this is causing the lag 
    String[] col = new String[] { "col1", "col2", "col3"}; 

    int[] ids = new int[] { R.id.item_col1, R.id.item_col2, R.id.item_col3}; 

    cursorAdapter = new SimpleCursorAdapter(this, R.layout.row, cursor, col, ids); 

    list.setAdapter(cursorAdapter); 
} 
+0

Итак, как вы действительно выполняете свой запрос? – ianhanniballake

+0

Я обновил вопрос о том, как я использую адаптер @ianhanniballake – abdulH

+0

Вы все еще работаете над этим? Вы хотите прочитать хороший учебник для начала? –

ответ

0

Использование LoaderManger.

Способ, которым у меня он установлен, есть setAdapter(), вызванный в onCreate(), где вы настроили адаптер. В onResume(), как и у вас, инициируйте или перезапустите загрузчик.

if(getLoaderManager().getLoader(SOME_ID) != null) 
      getLoaderManager().restartLoader(SOME_ID, null, this); 
     else 
      getLoaderManager().initLoader(SOME_ID, null, this); 

Документы предоставят вам хорошее представление о том, как настроить загрузчик и подключить его к адаптеру.

0

Вы можете одновременно загрузить несколько данных базы данных в ListView. Когда пользователь просматривает данные, вы можете получить больше данных из базы данных. Вам нужно будет управлять данными, когда пользователь прошел нижнюю строку (позицию) в ListView. Вы можете управлять этим с помощью getView или bindView. В getView пользователь может не понимать, что ваше приложение получает больше данных из базы данных. Если это хорошо работает, то работает только один поток!

Если какая-либо помощь, класс CursorAdapter имеет метод runQueryOnBackgroundThread для выполнения запроса базы данных, когда пользователь просматривает данные, будет выполняться 2 потока. Надеюсь, все ясно.

FYI: Я еще не достиг этой проблемы, но могу. Поэтому меня интересует ваше решение, а также другие предложения.

 Смежные вопросы

  • Нет связанных вопросов^_^