java - 为什么我们不在 bindView 中使用 moveToFirst()?

标签 java android sqlite cursor android-sqlite

实现时onLoadFinished() , 它需要 moveToFirst()运行良好,但为什么在实现 bindView() 时不需要这样做?对于 CursorAdapter ?以及何时使用它?
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));

    }
}
绑定(bind) View :
@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);
}

最佳答案

该 API 在 CursorAdapter.bindView 中明确声明:@param cursor The cursor from which to get the data. The cursor is already moved to the correct position.所以moveToFirst已经为你完成了。需要该操作来推进从数据库查询返回的记录。如果没有找到记录,则 moveToFirst 将根据 API 描述返回 false:Move the cursor to the first row. This method will return false if the cursor is empty.onLoadFinished 不是 CursorAdapter 的成员,因此不适合这样做。
问候,迈克

关于java - 为什么我们不在 bindView 中使用 moveToFirst()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64829157/

相关文章:

java - 迭代 HashMap 时引用局部变量 -> 从 lambda 表达式引用的局部变量必须是最终的或有效的最终错误

java - 反射 java.lang.ClassNotFoundException

android - 如何将日期和时间转换为 12 小时格式

android - 我如何在输入 "To"文件时获得电子邮件地址的建议?

sql - 获取 Swift 中的数据和数据库中的数据的差异

sql - 连接被拒绝:Laravel

从 ip 地址获取地理编码的 Java 库

Java - 树,返回 arrayList 中的最大节点数

java - Google Analytics 中的自定义维度/指标

python-3.x - 如何使用 pandas 中的条件从两个 SQLite 表创建 Excel 文件?