Я загружаю некоторые результаты из базы данных с помощью loaderManager. К сожалению, следующий код производит StaleDataException после поворота устройства:Слияние курсоров во время onLoadFinished() вызывает StaleDataException после вращения
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
// If we've returned results, then pass them and the webSearches cursor along to be displayed
if(cursor.moveToFirst())
{
// Get a cursor containing additional web searches and merge it at the end of the results cursor
MatrixCursor searchesCursor = getWebSearchesCursor(searchTerm, false);
Cursor[] cursors = { cursor, searchesCursor };
// TODO: Figure out why merging cursors here causes staledataexception after rotation
Cursor results = new MergeCursor(cursors);
// Display the cursor in the ListView
adapter.changeCursor(results);
}
// If no results were returned, then return suggestions for web searches
else
{
// Get a cursor containing additional web searches
MatrixCursor noResults = getWebSearchesCursor(searchTerm, true);
adapter.changeCursor(noResults);
}
// Show the listView and hide the progress spinner
toggleListView(SHOW);
}
Вызова getWebSearchesCursor() возвращает MatrixCursor с некоторым дополнительным поиском подсказками, чтобы сопровождать все возвращенные результаты. Я обнаружил, что изменение adapter.changeCursor (results) to adapter.changeCursor (cursor) исправляет ошибку, поэтому похоже, что слияние MatrixCursor с возвращенным курсором вызывает ошибку.
Мой вопрос: почему?
Если какие-либо результаты возвращены, я хотел бы иметь возможность добавлять дополнительные элементы в возвращаемый курсор, чтобы пользователь мог выполнять поиск на нескольких веб-сайтах. Есть ли лучший способ объединить курсоры, чтобы я не получил это исключение после ротации?