ACTUALIZACIÓN:
he reescrito la fuente y mi empleador ha hecho disponible como software de código abierto: https://github.com/clover/android-filteredcursor
No es necesario para reemplazar todos los métodos se mueven en CursorWrapper, que haces Sin embargo, debe sobrescribir un grupo debido al diseño de la interfaz del Cursor. Vamos a suponer que desea filtrar fila # 2 y # 4 de un cursor 7 fila, hacer una clase que se extiende CursorWrapper y anular estos métodos, así:
private int[] filterMap = new int[] { 0, 1, 3, 5, 6 };
private int mPos = -1;
@Override
public int getCount() { return filterMap.length }
@Override
public boolean moveToPosition(int position) {
// Make sure position isn't past the end of the cursor
final int count = getCount();
if (position >= count) {
mPos = count;
return false;
}
// Make sure position isn't before the beginning of the cursor
if (position < 0) {
mPos = -1;
return false;
}
final int realPosition = filterMap[position];
// When moving to an empty position, just pretend we did it
boolean moved = realPosition == -1 ? true : super.moveToPosition(realPosition);
if (moved) {
mPos = position;
} else {
mPos = -1;
}
return moved;
}
@Override
public final boolean move(int offset) {
return moveToPosition(mPos + offset);
}
@Override
public final boolean moveToFirst() {
return moveToPosition(0);
}
@Override
public final boolean moveToLast() {
return moveToPosition(getCount() - 1);
}
@Override
public final boolean moveToNext() {
return moveToPosition(mPos + 1);
}
@Override
public final boolean moveToPrevious() {
return moveToPosition(mPos - 1);
}
@Override
public final boolean isFirst() {
return mPos == 0 && getCount() != 0;
}
@Override
public final boolean isLast() {
int cnt = getCount();
return mPos == (cnt - 1) && cnt != 0;
}
@Override
public final boolean isBeforeFirst() {
if (getCount() == 0) {
return true;
}
return mPos == -1;
}
@Override
public final boolean isAfterLast() {
if (getCount() == 0) {
return true;
}
return mPos == getCount();
}
@Override
public int getPosition() {
return mPos;
}
Ahora la parte interesante es la creación de las filterMap, eso depende para ti.
¿Realmente no hay solución para ese problema? –