Я получаю очень проворную прокрутку, используя код ниже , создавая ListView из курсора. Есть ли что-то, что я делаю неправильно, или каким-либо образом улучшить производительность этого ListView?Прокрутка Jerky при использовании SimpleCursorAdapter с ListView
bookmarksListView = (ListView)findViewById(R.id.bookmarks_listview);
bookmarksDbCursor = bookmarkStore.getCursor();
startManagingCursor(bookmarksDbCursor);
String[] bookmarksColumns = new String[3];
bookmarksColumns[0] = "TITLE";
bookmarksColumns[1] = "URL";
bookmarksColumns[2] = "ICONID";
int[] bookmarksViews = new int[3];
bookmarksViews[0] = R.id.title_text;
bookmarksViews[1] = R.id.subtitle_text;
bookmarksViews[2] = R.id.icon_view;
bookmarksListAdapter = new SimpleCursorAdapter(this,
R.layout.list_item,
bookmarksDbCursor,
bookmarksColumns,
bookmarksViews);
bookmarksListView.setAdapter(bookmarksListAdapter);
bookmarksListView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(BookmarkHistoryTabActivity.this, "Clicked ID " +
Long.toString(id), Toast.LENGTH_SHORT).show();
}
});
registerForContextMenu(bookmarksListView);
Примечание: bookmarkStore.getCursor()
возвращает неуправляемый курсор из SQLite базы данных, содержащей столбцы bookmarksColumns
.
Значки, которые я загружаю (из R.drawable), не являются проблемой - я попытался отключить их, и он не имеет эффекта . Я столкнулся с аналогичной проблемой прокрутки с пользовательским списком ListAdapter , который расширяет BaseAdapter, который я написал некоторое время назад, и это было вызвано неправильным , устанавливающим значения представления в getView(). Я разрешил его с помощью исправленного сообщения по адресу How to load the Listview "smoothly" in android .. ., , но это было для пользовательского класса адаптера, и я не совсем уверен, как реализовать это исправление, когда я использую запас SimpleCursorAdapter, или если это исправление относится даже к этой ситуации.
EDIT: Запрос возвращения информации о базе данных выглядит следующим образом, в случае, который помогает:
public Cursor getCursor() {
openDB();
Cursor c = mDB.query(DB_TABLENAME, new String[]{"_id", "ICONID", "DATE", "TITLE", "URL"}, null, null, null, null,"DATE DESC");
return c;
}
edit2: Я понятия не имею, почему, но это происходит только в андроид 1.6+ я пытался изменение моего запроса, удаление сортировки и т. д. для моего курсора, кажется, ничего не помогает. База данных очень маленькая (< 20 элементов) и содержит только столбцы, присутствующие в запросе выше.
Будут ли проблемы, которые вы описываете, все еще вызывают проблемы, если в базе данных очень мало элементов? Я все еще вижу это поведение даже с менее чем 10 элементами в базе данных. – QRohlf
Больше, чем проблема с количеством элементов в базе данных, это будет скорее проблемой с самим запросом. Например, если вы делаете много объединений, союзов, групп/отдельных и/или SQL-функций. Если его просто выбрать * от чего бы то ни было, проблема не должна быть проблемой. Если база данных «действительно» беспорядочна (не ваша ошибка, запуск чистой в этой базе данных исправит это). – Moncader