Почему мы не используем moveToFirst() в BindView?

#java #android #sqlite #cursor #android-sqlite

#java #Android #sqlite #курсор #android-sqlite

Вопрос:

При реализации onLoadFinished() требуется moveToFirst() хорошая работа, но почему это не требуется при реализации bindView() for CursorAdapter ? И когда это использовать?

Загрузка завершена:

 @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));

    }
}
  

BindView:

 @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);
}
  

Ответ №1:

API явно указывает в CursorAdapter.BindView: @param cursor The cursor from which to get the data. The cursor is already moved to the correct position. итак moveToFirst , это уже сделано для вас. Действие необходимо для продвижения по записям, возвращенным из запроса в базе данных. Если записи не найдены, moveToFirst вернет false согласно описанию API: Move the cursor to the first row. This method will return false if the cursor is empty.

onLoadFinished не является членом CursorAdapter и, следовательно, не предназначен для этого.

С уважением, Майк

Комментарии:

1. Большое спасибо за ответ <3