Cuando se implementa onLoadFinished() , se requiere que moveToFirst() funcione bien, pero ¿por qué no se requiere esto cuando se implementa bindView() para CursorAdapter ? ¿Y cuándo usarlo?
onLoadFinished:
@Override public void onLoadFinished(@NonNull Loader loader, Cursor data) { if (data.moveToFirst()) { int nameColumnIndex = data.getColumnIndexOrThrow(PetEntry.COLUMN_PET_NAME); int breedColumnIndex = data.getColumnIndexOrThrow(PetEntry.COLUMN_PET_BREED); mNameEditText.setText(data.getString(nameColumnIndex)); mBreedEditText.setText(data.getString(breedColumnIndex)); } }enlazarVista:
@Override public void bindView(View view, Context context, Cursor cursor) { TextView name = view.findViewById(R.id.name); TextView summary = view.findViewById(R.id.summary); String nameString = cursor.getString(cursor.getColumnIndexOrThrow(PetEntry.COLUMN_PET_NAME)); String summaryString = cursor.getString(cursor.getColumnIndexOrThrow(PetEntry.COLUMN_PET_BREED)); name.setText(nameString); summary.setText(summaryString); }La API establece explícitamente en CursorAdapter.bindView: @param cursor The cursor from which to get the data. The cursor is already moved to the correct position. Así que moveToFirst ya está listo para usted. La acción es necesaria para avanzar en los registros devueltos por la consulta en la base de datos. Si no se encuentran registros, moveToFirst devolverá falso según la descripción de la API: Move the cursor to the first row. This method will return false if the cursor is empty.
onLoadFinished no es miembro de CursorAdapter y, por lo tanto, no está diseñado para hacerlo.
Saludos, Mike