Пожалуйста, помогите мне понять, что здесь происходит.
У меня есть два фрагмента (A и B) на вкладках, читающих данные из разных таблиц через CursorLoader и aContentProvider в базе данных Sqlite. С разными URI я могу изменить, какую таблицу запрашивает ContentProvider.
I работает, как и ожидалось, при переключении между вкладками A и B, если я не переключаюсь на B, не поворачиваю и не переключаюсь обратно на A, возвращается неправильный курсор. Курсор из фрагмента B возвращается вместо курсора для фрагмента A, что приводит к сбою listView во фрагменте A. Каким-то образом кажется, что курсор повторно используется при вращении.
Почему это происходит и как я могу предотвратить возврат неправильного курсора?
Это то, что у меня есть как во фрагменте A, так и во фрагменте B. Безуспешно пытался определить идентификатор загрузчика.
public void onResume() {
super.onResume();
getLoaderManager().restartLoader(mLoaderId, null, this);
}
Мой ContentProvider выглядит так:
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
Cursor cursor = null;
switch (uriMatcher.match(uri)) {
case ALL_NEWS:
queryBuilder.setTables(NewsDb.SQLITE_TABLE);
cursor = queryBuilder.query(db, projection, selection,
selectionArgs, null, null, sortOrder);
break;
case SINGLE_PLACE:
queryBuilder.setTables(PlacesDb.SQLITE_TABLE);
String id = uri.getPathSegments().get(1);
queryBuilder.appendWhere(PlacesDb.KEY_ID + "=" + id);
cursor = queryBuilder.query(db, projection, selection,
selectionArgs, null, null, sortOrder);
break;
default:
throw new IllegalArgumentException("Unsupported URI: " + uri);
}
return cursor;
}
Loader
вonResume()
? При использованииCursorLoader
данные автоматически обновляются. 2. Используете ли выLoader
вActivity
? Если да, то почему? - person Paul Burke   schedule 25.11.2013